---
title: Application business rules
summary: Every business rule reachable from this application's execution paths, with per-rule trigger, enforcement, outcome, origin, and entry point.
status: draft
owner: <owner>
last_reviewed: 2026-08-26
---

# Application business rules

This page is the complete catalog of business rules that govern this application's behavior. A rule appears here when it is enforced on a code path this application can actually execute — regardless of whether the enforcing code lives in the application project, a screen code-behind, or a consumed library in this repository.

Rules defined in a consumed library but never reached by this application are **out of scope** and are listed only in [Rules not reachable from this application](#rules-not-reachable-from-this-application).

## Rule scope and coverage

Reachability was determined by tracing outward from this application's entry points — screen event handlers, application workflow steps, and application startup/infrastructure code — through every delegation recorded in the analysis findings and published library and screen documentation.

| Category | Section | Count |
| --- | --- | --- |
| Application-level (cross-cutting) | [Application-level business rules](#application-level-business-rules) | 7 |
| Screen-enforced | [Screen business rules](#screen-business-rules) | 24 |
| Library-defined, in scope | [Library business rules in scope](#library-business-rules-in-scope) | 17 |
| Inherited from framework packages | [Inherited business rules](#inherited-business-rules) | 0 |
| **Total in scope** | | **48** |
| Library-defined, not reachable | [Rules not reachable from this application](#rules-not-reachable-from-this-application) | 88 |

## Rule index

| Rule ID | Statement | Origin | Reached from |
| --- | --- | --- | --- |
| [BR-APP-001](#br-app-001-confidential-claim-access-gating) | Conflict, exposure, hostile-worker, and health-issue claim flags are checked before a case or claim-linked popup exposes sensitive claim data. | Application | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-APP-002](#br-app-002-default-restricted-access-with-explicit-role-escalation) | Access defaults to restricted or view-only until an application manager explicitly marks a higher role. | Application | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-APP-003](#br-app-003-consolidated-case-state-propagation) | Consolidated secondary cases stay aligned to primary-case status and related state changes. | Application | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md) |
| [BR-APP-004](#br-app-004-non-production-safety-redirection) | Non-production execution redirects or suppresses live outbound DEF and assignment-side integrations. | Application | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| [BR-APP-005](#br-app-005-note-maintenance-and-deletion-restrictions) | Note update and deletion rights depend on role, note type, and whether the note was system-created. | Application | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-APP-006](#br-app-006-guidewire-integration-is-best-effort) | Guidewire and WCD integration failures are logged without failing the underlying save. | Application | [Manage a legal case request](operations/manage-a-legal-case-request.md) |
| [BR-APP-007](#br-app-007-policy-access-and-data-masking) | Policy visibility and demo-data masking are applied before policyholder details are shown. | Application | [Manage a legal case request](operations/manage-a-legal-case-request.md) |
| [BR-SCR-001](#br-scr-001-case-search-ssn-input-is-client-side-masked) | SSN entry on Case Search is client-side masked before submission. | [Case Search](../screens/frm-case-search.md) | [Case Search](../screens/frm-case-search.md) |
| [BR-SCR-002](#br-scr-002-acknowledge-warns-before-list-type-switch-with-unsaved-changes) | Acknowledge warns before switching list type with unsaved changes. | [Acknowledge](../screens/frm-acknowledge.md) | [Acknowledge](../screens/frm-acknowledge.md) |
| [BR-SCR-003](#br-scr-003-acknowledge-highlights-validation-failures-in-error-colors) | Acknowledge highlights invalid entries when validation fails. | [Acknowledge](../screens/frm-acknowledge.md) | [Acknowledge](../screens/frm-acknowledge.md) |
| [BR-SCR-004](#br-scr-004-request-screen-cannot-delete-a-case-with-a-hearing-set) | Request blocks deleting a case when a hearing is already set. | [Request](../screens/frm-request.md) | [Request](../screens/frm-request.md) |
| [BR-SCR-005](#br-scr-005-request-insert-is-restricted-to-the-admin-group) | Request allows case insert only for admin users. | [Request](../screens/frm-request.md) | [Request](../screens/frm-request.md) |
| [BR-SCR-006](#br-scr-006-request-screen-reconfigures-fields-by-case-type) | Request shows different fields for Federal versus WCB, DCBS, and Pre-Litigation cases. | [Request](../screens/frm-request.md) | [Request](../screens/frm-request.md) |
| [BR-SCR-007](#br-scr-007-new-request-save-prompts-for-reconsideration-packet-send) | Saving a new request prompts for reconsideration-packet send confirmation. | [Request](../screens/frm-request.md) | [Request](../screens/frm-request.md) |
| [BR-SCR-008](#br-scr-008-request-screen-collects-issue-selections-from-form-checkboxes) | Request collects selected issue codes from posted checkbox values. | [Request](../screens/frm-request.md) | [Request](../screens/frm-request.md) |
| [BR-SCR-009](#br-scr-009-schedule-delete-is-restricted-to-the-admin-group) | Schedule allows row deletion only for admin users. | [Schedule](../screens/frm-schedule.md) | [Schedule](../screens/frm-schedule.md) |
| [BR-SCR-010](#br-scr-010-schedule-lce-edit-rights-are-split-by-security-group) | Schedule splits LCE due-date and LCE update rights by separate groups. | [Schedule](../screens/frm-schedule.md) | [Schedule](../screens/frm-schedule.md) |
| [BR-SCR-011](#br-scr-011-schedule-loads-federal-vs-state-reference-data-by-claim-type) | Schedule loads different schedule-type and hearing-location lists for Federal versus State claims. | [Schedule](../screens/frm-schedule.md) | [Schedule](../screens/frm-schedule.md) |
| [BR-SCR-012](#br-scr-012-appeal-row-switch-is-blocked-until-current-edits-are-saved) | Appeal blocks row switching until the current appeal is saved. | [Appeal](../screens/frm-appeal.md) | [Appeal](../screens/frm-appeal.md) |
| [BR-SCR-013](#br-scr-013-appeal-shows-extension-and-oral-argument-grids-only-when-allowed) | Appeal shows extension and oral-argument grids only when the active appeal supports them. | [Appeal](../screens/frm-appeal.md) | [Appeal](../screens/frm-appeal.md) |
| [BR-SCR-014](#br-scr-014-appeal-disables-delete-for-unsaved-appeals) | Appeal disables delete for unsaved appeals. | [Appeal](../screens/frm-appeal.md) | [Appeal](../screens/frm-appeal.md) |
| [BR-SCR-015](#br-scr-015-appeal-loads-federal-vs-state-schedule-reference-data) | Appeal loads different schedule types and hearing locations for Federal versus State cases. | [Appeal](../screens/frm-appeal.md) | [Appeal](../screens/frm-appeal.md) |
| [BR-SCR-016](#br-scr-016-appeal-brief-dates-are-client-side-auto-calculated) | Appeal auto-calculates brief dates from due-date changes.* | [Appeal](../screens/frm-appeal.md) | [Appeal](../screens/frm-appeal.md) |
| [BR-SCR-017](#br-scr-017-assignment-review-date-must-fall-within-the-allowed-range) | Assignment review date must fall between 1/1/2003 and 1/1/2053. | [Assignment](../screens/frm-assignment.md) | [Assignment](../screens/frm-assignment.md) |
| [BR-SCR-018](#br-scr-018-assignment-run-is-disabled-in-view-only-mode) | Assignment disables Run Assignment in view-only mode. | [Assignment](../screens/frm-assignment.md) | [Assignment](../screens/frm-assignment.md) |
| [BR-SCR-019](#br-scr-019-case-cost-provider-location-must-be-numeric-and-resolve-to-a-provider) | Case Cost requires a numeric provider location that resolves in the provider database. | [Case Cost](../screens/frm-case-cost.md) | [Case Cost](../screens/frm-case-cost.md) |
| [BR-SCR-020](#br-scr-020-case-cost-row-switch-is-blocked-until-current-edits-are-saved) | Case Cost blocks row switching until current edits are saved. | [Case Cost](../screens/frm-case-cost.md) | [Case Cost](../screens/frm-case-cost.md) |
| [BR-SCR-021](#br-scr-021-case-cost-case-switch-warns-when-edits-are-dirty) | Case Cost warns before switching cases with unsaved edits. | [Case Cost](../screens/frm-case-cost.md) | [Case Cost](../screens/frm-case-cost.md) |
| [BR-SCR-022](#br-scr-022-create-file-letter-date-cannot-be-in-the-past) | Create File rejects a past letter date. | [Create File](../screens/frm-create-file.md) | [Create File](../screens/frm-create-file.md) |
| [BR-SCR-023](#br-scr-023-create-file-letter-date-is-auto-adjusted-to-the-next-business-day) | Create File auto-adjusts a non-business-day letter date to the next work day. | [Create File](../screens/frm-create-file.md) | [Create File](../screens/frm-create-file.md) |
| [BR-SCR-024](#br-scr-024-mail-date-blocks-list-type-switching-while-edits-are-unsaved) | Mail Date blocks list-type switching while edits are unsaved. | [Mail Date](../screens/frm-mail-date.md) | [Mail Date](../screens/frm-mail-date.md) |
| [BR-SCR-025](#br-scr-025-mail-date-validates-the-mailed-date-through-maildatelist-messages) | Mail Date validates mailed dates through MailDateList warning and error messages. | [Mail Date](../screens/frm-mail-date.md) | [Mail Date](../screens/frm-mail-date.md) |
| [BR-SCR-026](#br-scr-026-other-parties-warns-before-case-switch-with-unsaved-edits) | Other Parties warns before case switch with unsaved edits. | [Other Parties](../screens/frm-other-parties.md) | [Other Parties](../screens/frm-other-parties.md) |
| [BR-SCR-027](#br-scr-027-outcomes-blocks-row-switching-while-the-current-outcome-is-dirty) | Outcomes blocks row switching while the current outcome has unsaved edits. | [Outcomes](../screens/frm-outcomes.md) | [Outcomes](../screens/frm-outcomes.md) |
| [BR-SCR-028](#br-scr-028-outcomes-close-case-action-sets-case-status) | Outcomes Close Case changes case status through manager logic.* | [Outcomes](../screens/frm-outcomes.md) | [Outcomes](../screens/frm-outcomes.md) |
| [BR-SCR-029](#br-scr-029-outcomes-disable-edit-actions-when-no-order-exists-or-access-is-view-only) | Outcomes disables edit actions when no order exists or the screen is view-only. | [Outcomes](../screens/frm-outcomes.md) | [Outcomes](../screens/frm-outcomes.md) |
| [BR-SCR-030](#br-scr-030-summary-falls-back-to-recon-packet-received-date-when-oar-mailed-date-is-empty) | Summary falls back to Recon Packet Received when OAR Mailed is empty. | [Case Summary](../screens/frm-summary.md) | [Case Summary](../screens/frm-summary.md) |
| [BR-SCR-031](#br-scr-031-attorney-time-off-retrieval-is-capped-at-150-rows) | Attorney Time Off retrieval is capped at 150 rows. | [Attorney Time Off](../screens/frm-time-off.md) | [Attorney Time Off](../screens/frm-time-off.md) |
| [BR-SCR-032](#br-scr-032-update-case-disables-save-and-most-controls-in-view-only-mode) | Update Case disables save and most controls in view-only mode. | [Update Case](../screens/frm-update-case.md) | [Update Case](../screens/frm-update-case.md) |
| [BR-SCR-033](#br-scr-033-update-case-runs-dirty-and-validity-checks-before-save) | Update Case runs dirty and validity checks before save. | [Update Case](../screens/frm-update-case.md) | [Update Case](../screens/frm-update-case.md) |
| [BR-CLM-001](#br-clm-001-conflict-claim-access-restriction) | A worker-conflict claim is denied unless the caller has conflict access or a security override. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-001-conflict-claim-access-restriction) | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-CLM-002](#br-clm-002-exposure-claim-access-restriction) | An exposure-flagged claim clears exposure access for callers without exposure rights. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-002-exposure-claim-access-restriction) | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-CLM-003](#br-clm-003-health-issue-claim-access-restriction) | A health-issue exposure claim clears health-issue access when exposure access is missing. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-003-health-issue-claim-access-restriction) | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-CLM-004](#br-clm-004-hostile-secure-claim-access-restriction) | A hostile-worker claim clears secure-claim access for callers without secure-claim rights. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-004-hostile-secure-claim-access-restriction) | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-CLM-LGL-001](#br-clm-lgl-001-case-cost-date-ranges-must-be-valid) | Case cost service and authorization dates must remain valid and ordered. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-001-case-cost-date-ranges-must-be-valid) | [Capture and approve case costs](operations/capture-and-approve-case-costs.md) |
| [BR-CLM-LGL-002](#br-clm-lgl-002-case-cost-entry-requires-a-payee) | A case cost entry requires a payee. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-002-case-cost-entry-requires-a-payee) | [Capture and approve case costs](operations/capture-and-approve-case-costs.md) |
| [BR-CLM-LGL-003](#br-clm-lgl-003-case-cost-entry-requires-service-code%2C-authorizer%2C-and-canceller) | A case cost entry requires service code, authorizer, and a canceller when cancelled. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-003-case-cost-entry-requires-service-code%2C-authorizer%2C-and-canceller) | [Capture and approve case costs](operations/capture-and-approve-case-costs.md) |
| [BR-CLM-LGL-004](#br-clm-lgl-004-case-search-input-must-match-search-type-format) | Case search criteria must match the chosen search type's format. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-004-case-search-input-must-match-search-type-format) | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| [BR-CLM-LGL-011](#br-clm-lgl-011-attorney-schedule-dates-must-be-valid-and-non-past) | Attorney schedule dates must be current or future and expiration cannot precede effective date. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-011-attorney-schedule-dates-must-be-valid-and-non-past) | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| [BR-CLM-LGL-023](#br-clm-lgl-023-worker-attorney-display-fallback-chain) | Worker-attorney display falls back from attorney name to firm name to worker name. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-023-worker-attorney-display-fallback-chain) | [Case Summary](../screens/frm-summary.md) |
| [BR-CLM-LGL-027](#br-clm-lgl-027-case-status-propagates-to-consolidated-secondary-cases) | Primary-case status updates also update every consolidated secondary case. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-027-case-status-propagates-to-consolidated-secondary-cases) | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md) |
| [BR-CLM-LGL-028](#br-clm-lgl-028-appeal-deletion-cascades-schedule-and-state-cleanup) | Deleting an appeal also cleans up linked schedules and related derived case state. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-028-appeal-deletion-cascades-schedule-and-state-cleanup) | [File and maintain appeals](operations/file-and-maintain-appeals.md) |
| [BR-CLM-LGL-030](#br-clm-lgl-030-schedule-retrieval-includes-consolidated-primary-schedules-for-secondary-cases) | Secondary consolidated cases retrieve primary-case schedules alongside direct schedules. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-030-schedule-retrieval-includes-consolidated-primary-schedules-for-secondary-cases) | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md) |
| [BR-CLM-LGL-031](#br-clm-lgl-031-mail-and-acknowledgement-updates-are-type-driven) | Mail-date and acknowledgement updates change only the columns implied by the caller's declared type. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-031-mail-and-acknowledgement-updates-are-type-driven) | [Process mail dates, acknowledgements, and file creation](operations/process-mail-dates-acknowledgements-and-file-creation.md) |
| [BR-CLM-LGL-032](#br-clm-lgl-032-assignment-only-succeeds-when-every-blocker-count-is-zero) | Assignment succeeds only when every blocker count is zero. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-032-assignment-only-succeeds-when-every-blocker-count-is-zero) | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| [BR-CLM-LGL-033](#br-clm-lgl-033-weekly-load-thresholds-vary-by-attorney-load-percent) | Weekly load blocking thresholds vary by attorney load percentage. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-033-weekly-load-thresholds-vary-by-attorney-load-percent) | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| [BR-CLM-LGL-034](#br-clm-lgl-034-rotation-assignment-only-targets-pending-unassigned-hearing-rows-in-active-rotation-coverage) | Rotation assignment targets only pending, unassigned hearing rows covered by an active rotation. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-034-rotation-assignment-only-targets-pending-unassigned-hearing-rows-in-active-rotation-coverage) | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| [BR-LGL-004](#br-lgl-004-printing-a-def-letter-marks-the-case-def-sent) | Printing a DEF letter marks the case as DEF-sent and clears the pending-send flag. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-004-printing-a-def-letter-marks-the-case-def-sent) | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md) |
| [BR-LGL-007](#br-lgl-007-hearing-schedule-sync-to-guidewire-requires-an-assigned-attorney) | Guidewire schedule sync runs only when an attorney is assigned. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-007-hearing-schedule-sync-to-guidewire-requires-an-assigned-attorney) | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| [BR-LGL-011](#br-lgl-011-consolidation-is-rejected-when-a-hearing-is-scheduled-in-the-past-for-a-set-reset-case) | Consolidation is rejected when a Set/Reset case has a past scheduled hearing. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-011-consolidation-is-rejected-when-a-hearing-is-scheduled-in-the-past-for-a-set-reset-case) | [Manage a legal case request](operations/manage-a-legal-case-request.md) |
| [BR-VP-002](#br-vp-002-secure-policy-ad-resource-gate) | Secure SAIF policies require the SAIFpolicyInfo AD resource. | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-002-secure-policy-ad-resource-gate) | [Manage a legal case request](operations/manage-a-legal-case-request.md) |
| [BR-VP-003](#br-vp-003-policy-validity-and-non-zero-policy-number-required-for-access) | Policy access requires a valid policy with a non-zero policy number. | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-003-policy-validity-and-non-zero-policy-number-required-for-access) | [Manage a legal case request](operations/manage-a-legal-case-request.md) |
| [BR-VP-010](#br-vp-010-demo-user-agency-agent-data-masking) | Demo users see masked agency and agent identity data. | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-010-demo-user-agency-agent-data-masking) | [Manage a legal case request](operations/manage-a-legal-case-request.md) |
| [BR-VP-011](#br-vp-011-demo-user-address-contact-data-masking) | Demo users see masked address and contact data. | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-011-demo-user-address-contact-data-masking) | [Manage a legal case request](operations/manage-a-legal-case-request.md) |

## Application-level business rules

Rules composed at the application level or enforced jointly by multiple libraries, with no single owning library.

## BR-APP-001 Confidential claim access gating

| Field | Value |
| --- | --- |
| **Statement** | Conflict, exposure, hostile-worker, and health-issue claim flags are checked before a case or claim-linked popup exposes sensitive claim data. |
| **Trigger** | A user opens a legal case or claim-linked popup after claim context is established for a flagged claim. |
| **Enforcement** | `ClaimAppManager` and `LegalManagerBase` apply claim-security checks during context change and retrieve; `ImageMovePopup.CheckClaimSecurity` applies the same claim-flag authorization pattern for popup access. |
| **Outcome** | Access is denied or data is masked unless the caller holds the required AD resources or a security override succeeds. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim](../libraries/saif-application-claim/overview.md), [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md), [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md), [Case Search](../screens/frm-case-search.md) |
| **Source** | `SAIF.Application.Claim\ClaimAppManager.vb`; `SAIF.Application.Claim\ClaimSecurity.vb`; `SAIF.Application.Claim.Legal\LegalManagerBase.vb`; `SAIF.Presentation.Web.Controls.PopUps.Infragistics111\ImageMovePopup.vb` |

---

## BR-APP-002 Default-restricted access with explicit role escalation

| Field | Value |
| --- | --- |
| **Statement** | Access defaults to restricted or view-only until an application manager explicitly marks a higher role. |
| **Trigger** | Screen managers finish loading context and run their security checks. |
| **Enforcement** | `AppManagerBase` defaults to `NoAccess`; `ClaimAppManager` and `LegalManagerBase` set view-only or update access during `OnCheckSecurity()` and `OnRetrieve()`. |
| **Outcome** | Screens remain view-only or inaccessible until the concrete manager grants update rights. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application](../libraries/saif-application/overview.md), [SAIF.Application.Claim](../libraries/saif-application-claim/overview.md), [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md), [File and maintain appeals](operations/file-and-maintain-appeals.md) |
| **Source** | `SAIF.Application\AppManagerBase.vb`; `SAIF.Application.Claim\ClaimAppManager.vb`; `SAIF.Application.Claim.Legal\LegalManagerBase.vb` |

---

## BR-APP-003 Consolidated case state propagation

| Field | Value |
| --- | --- |
| **Statement** | Consolidated secondary cases stay aligned to primary-case status, file-location, legal-case-evaluation, and schedule-driven state changes. |
| **Trigger** | A user saves a primary case in schedule, request, or related case-maintenance workflows while consolidation links exist. |
| **Enforcement** | `LegalManagerBase` propagates status, file-location, LCE, and DEF state updates; downstream business-layer procedures return or update consolidation-linked rows. |
| **Outcome** | Secondary consolidated cases mirror primary-case state and secondary-case editing is blocked on affected screens. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md), [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) |
| **Reached from** | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md), [Other Parties](../screens/frm-other-parties.md), [Schedule](../screens/frm-schedule.md) |
| **Tables** | [CONSOLIDATED_CASE](../libraries/saif-business-claim-legal/database-tables.md#consolidated_case) |
| **Source** | `SAIF.Application.Claim.Legal\LegalManagerBase.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsConsolidations.vb` |

---

## BR-APP-004 Non-production safety redirection

| Field | Value |
| --- | --- |
| **Statement** | Non-production execution redirects or suppresses live outbound DEF and assignment-side integrations. |
| **Trigger** | The application sends DEF email reminders or runs assignment-related outbound integration outside Production. |
| **Enforcement** | Environment checks in `clsScheduleManager.SendDEFEmail`, `clsAssignmentManager.Testing`, and related business-layer non-production branches alter recipients or testing behavior. |
| **Outcome** | Non-production environments avoid live external notifications and run assignment processing in test-aware mode. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md), [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) |
| **Reached from** | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md), [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md) |
| **Source** | `SAIF.Application.Claim.Legal\LegalNet\clsAssignmentManager.vb`; `SAIF.Application.Claim.Legal\LegalNet\clsScheduleManager.vb`; `SAIF.Business.Claim.Legal\TableMaint\clsAttorneyWorkerAssignment.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsConsolidations.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsLegalSchedule.vb` |

---

## BR-APP-005 Note maintenance and deletion restrictions

| Field | Value |
| --- | --- |
| **Statement** | Note update and deletion rights depend on role, note type, and whether the note was system-created. |
| **Trigger** | A user opens, edits, or deletes legal case notes. |
| **Enforcement** | `clsCaseNotesManager` evaluates `LNAdmin`, `LNCaseUpdate`, `LNUpdate`, `LNNoteView`, and note origin before allowing update or deletion. |
| **Outcome** | Unauthorized users are limited to permitted note actions, and system-created notes cannot be deleted. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md), [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| **Source** | `SAIF.Application.Claim.Legal\LegalNet\clsCaseNotesManager.vb` |

---

## BR-APP-006 Guidewire integration is best-effort

| Field | Value |
| --- | --- |
| **Statement** | Guidewire and WCD integration failures are logged without failing the underlying save. |
| **Trigger** | A request, schedule, or assignment save attempts Guidewire or WCD synchronization. |
| **Enforcement** | `clsScheduleManager`, `clsAssignmentManager`, and `clsRequestManager.UpdateWcdData` catch downstream API exceptions, log them, and continue the save. |
| **Outcome** | The local save succeeds even when the external integration fails. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md), [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md), [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md) |
| **Source** | `SAIF.Application.Claim.Legal\LegalNet\clsRequestManager.vb`; `SAIF.Application.Claim.Legal\LegalNet\clsScheduleManager.vb`; `SAIF.Application.Claim.Legal\LegalNet\clsAssignmentManager.vb` |

---

## BR-APP-007 Policy access and data masking

| Field | Value |
| --- | --- |
| **Statement** | Policy visibility and demo-data masking are applied before policyholder details are shown. |
| **Trigger** | Request, summary, or related case-context screens retrieve policyholder context for the current claim. |
| **Enforcement** | `clsPolicySecurity.IsPolicyValidForUser`, `clsPolicyData`, `clsAgency`, and `clsPolicyAddress` apply access checks and masking before the screen renders policyholder details. |
| **Outcome** | Unauthorized users are denied access to secure policies, and demo users see masked identity and contact data. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md), [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Case Summary](../screens/frm-summary.md) |
| **Source** | `SAIF.Business.View.Policy\clsPolicySecurity.vb`; `SAIF.Business.View.Policy\clsAgency.vb`; `SAIF.Business.View.Policy\clsPolicyAddress.vb`; `SAIF.Business.View.Policy\clsPolicyData.vb` |

---

## Screen business rules

Rules enforced directly in a screen's markup validators or code-behind event handlers, not delegated to a library.

## BR-SCR-001 Case Search SSN input is client-side masked

| Field | Value |
| --- | --- |
| **Statement** | SSN entry on Case Search is client-side masked before submission. |
| **Trigger** | A user enters SSN search criteria on [Case Search](../screens/frm-case-search.md). |
| **Enforcement** | `frmCaseSearch.aspx` applies a jQuery mask to the SSN input control. |
| **Outcome** | SSN input is constrained to the masked format before the search posts back. |
| **Origin** | [Case Search](../screens/frm-case-search.md) |
| **Reached from** | [Case Search](../screens/frm-case-search.md) |
| **Source** | `Legal\frmCaseSearch.aspx`; `Legal\Scripts\CaseSearch.js` |

---

## BR-SCR-002 Acknowledge warns before list-type switch with unsaved changes

| Field | Value |
| --- | --- |
| **Statement** | Acknowledge warns before switching list type when the current grid has unsaved changes. |
| **Trigger** | A user changes the WCB/DCBS toggle on [Acknowledge](../screens/frm-acknowledge.md). |
| **Enforcement** | `frmAcknowledge.aspx.vb` checks dirty state before `rbCaseType.SelectedIndexChanged` completes. |
| **Outcome** | The user is warned instead of silently losing pending edits. |
| **Origin** | [Acknowledge](../screens/frm-acknowledge.md) |
| **Reached from** | [Acknowledge](../screens/frm-acknowledge.md) |
| **Source** | `Legal\frmAcknowledge.aspx.vb` |

---

## BR-SCR-003 Acknowledge highlights validation failures in error colors

| Field | Value |
| --- | --- |
| **Statement** | Acknowledge highlights invalid entries when validation fails. |
| **Trigger** | A user saves acknowledgement updates that fail validation on [Acknowledge](../screens/frm-acknowledge.md). |
| **Enforcement** | `frmAcknowledge.aspx.vb` applies error-color styling during validation failure handling. |
| **Outcome** | Invalid rows are visually flagged for correction. |
| **Origin** | [Acknowledge](../screens/frm-acknowledge.md) |
| **Reached from** | [Acknowledge](../screens/frm-acknowledge.md) |
| **Source** | `Legal\frmAcknowledge.aspx.vb` |

---

## BR-SCR-004 Request screen cannot delete a case with a hearing set

| Field | Value |
| --- | --- |
| **Statement** | Request blocks deleting a case when a hearing is already set. |
| **Trigger** | A user invokes Delete on [Request](../screens/frm-request.md). |
| **Enforcement** | `frmRequest.aspx.vb` checks for hearing state before allowing the delete path to continue. |
| **Outcome** | The case stays in place until the hearing dependency is cleared. |
| **Origin** | [Request](../screens/frm-request.md) |
| **Reached from** | [Request](../screens/frm-request.md) |
| **Source** | `Legal\frmRequest.aspx.vb` |

---

## BR-SCR-005 Request insert is restricted to the admin group

| Field | Value |
| --- | --- |
| **Statement** | Request allows case insert only for admin users. |
| **Trigger** | A user invokes Insert on [Request](../screens/frm-request.md). |
| **Enforcement** | `frmRequest.aspx.vb` checks `Manager.IsInAdminGroup` before enabling or executing insert behavior. |
| **Outcome** | Non-admin users cannot create a new legal case from this screen. |
| **Origin** | [Request](../screens/frm-request.md) |
| **Reached from** | [Request](../screens/frm-request.md) |
| **Source** | `Legal\frmRequest.aspx.vb` |

---

## BR-SCR-006 Request screen reconfigures fields by case type

| Field | Value |
| --- | --- |
| **Statement** | Request shows different fields for Federal versus WCB, DCBS, and Pre-Litigation cases. |
| **Trigger** | A user selects or loads a case type on [Request](../screens/frm-request.md). |
| **Enforcement** | `frmRequest.aspx.vb` toggles OWCP, postmark, stress, WCB-requested, and consolidation controls by case type. |
| **Outcome** | Users see only the inputs relevant to the current request type. |
| **Origin** | [Request](../screens/frm-request.md) |
| **Reached from** | [Request](../screens/frm-request.md) |
| **Source** | `Legal\frmRequest.aspx.vb` |

---

## BR-SCR-007 New request save prompts for reconsideration-packet send

| Field | Value |
| --- | --- |
| **Statement** | Saving a new request prompts for reconsideration-packet send confirmation. |
| **Trigger** | A user saves a new case on [Request](../screens/frm-request.md). |
| **Enforcement** | `frmRequest.aspx.vb` invokes client-side `SAIF.LEGAL.askSendRecon()` from the save flow. |
| **Outcome** | The user must acknowledge the reconsideration-packet prompt before the workflow continues. |
| **Origin** | [Request](../screens/frm-request.md) |
| **Reached from** | [Request](../screens/frm-request.md) |
| **Source** | `Legal\frmRequest.aspx.vb` |

---

## BR-SCR-008 Request screen collects issue selections from form checkboxes

| Field | Value |
| --- | --- |
| **Statement** | Request collects selected issue codes from posted checkbox values. |
| **Trigger** | A user saves issue selections on [Request](../screens/frm-request.md). |
| **Enforcement** | `frmRequest.aspx.vb` reads `Request.Form.GetValues("FORM_REQUEST_CODE")` to assemble selected issues. |
| **Outcome** | Only the posted issue selections are persisted with the legal case request. |
| **Origin** | [Request](../screens/frm-request.md) |
| **Reached from** | [Request](../screens/frm-request.md) |
| **Source** | `Legal\frmRequest.aspx.vb` |

---

## BR-SCR-009 Schedule delete is restricted to the admin group

| Field | Value |
| --- | --- |
| **Statement** | Schedule allows row deletion only for admin users. |
| **Trigger** | A user invokes Delete on [Schedule](../screens/frm-schedule.md). |
| **Enforcement** | `frmSchedule.aspx.vb` gates delete behavior on `Manager.IsInAdminGroup`. |
| **Outcome** | Non-admin users cannot delete schedule rows. |
| **Origin** | [Schedule](../screens/frm-schedule.md) |
| **Reached from** | [Schedule](../screens/frm-schedule.md) |
| **Source** | `Legal\frmSchedule.aspx.vb` |

---

## BR-SCR-010 Schedule LCE edit rights are split by security group

| Field | Value |
| --- | --- |
| **Statement** | Schedule splits LCE due-date and LCE update rights by separate groups. |
| **Trigger** | [Schedule](../screens/frm-schedule.md) loads LCE controls for the current user. |
| **Enforcement** | `frmSchedule.aspx.vb` checks dedicated security groups for due-date and general LCE updates. |
| **Outcome** | Users may be able to update due dates, broader LCE fields, both, or neither based on group membership. |
| **Origin** | [Schedule](../screens/frm-schedule.md) |
| **Reached from** | [Schedule](../screens/frm-schedule.md) |
| **Source** | `Legal\frmSchedule.aspx.vb` |

---

## BR-SCR-011 Schedule loads Federal vs State reference data by claim type

| Field | Value |
| --- | --- |
| **Statement** | Schedule loads different schedule-type and hearing-location lists for Federal versus State claims. |
| **Trigger** | [Schedule](../screens/frm-schedule.md) loads or switches case context. |
| **Enforcement** | `frmSchedule.aspx.vb` branches on `ClaimData.IsFederal` when populating reference lists. |
| **Outcome** | Users work with the schedule codes and locations appropriate to the claim type. |
| **Origin** | [Schedule](../screens/frm-schedule.md) |
| **Reached from** | [Schedule](../screens/frm-schedule.md) |
| **Source** | `Legal\frmSchedule.aspx.vb` |

---

## BR-SCR-012 Appeal row switch is blocked until current edits are saved

| Field | Value |
| --- | --- |
| **Statement** | Appeal blocks row switching until the current appeal is saved. |
| **Trigger** | A user selects a different appeal row on [Appeal](../screens/frm-appeal.md) while edits are dirty. |
| **Enforcement** | `frmAppeal.aspx.vb` runs a dirty check in `dgAppeals_RowChanged`. |
| **Outcome** | The screen keeps focus on the current appeal until the pending changes are handled. |
| **Origin** | [Appeal](../screens/frm-appeal.md) |
| **Reached from** | [Appeal](../screens/frm-appeal.md) |
| **Source** | `Legal\frmAppeal.aspx.vb` |

---

## BR-SCR-013 Appeal shows extension and oral-argument grids only when allowed

| Field | Value |
| --- | --- |
| **Statement** | Appeal shows extension and oral-argument grids only when the active appeal supports them. |
| **Trigger** | [Appeal](../screens/frm-appeal.md) loads the current appeal. |
| **Enforcement** | `frmAppeal.aspx.vb` checks `CurrentAppeal.CanHaveExtensions` before showing the related grids. |
| **Outcome** | Extension and oral-argument editing stays hidden for appeal types that do not support those records. |
| **Origin** | [Appeal](../screens/frm-appeal.md) |
| **Reached from** | [Appeal](../screens/frm-appeal.md) |
| **Source** | `Legal\frmAppeal.aspx.vb` |

---

## BR-SCR-014 Appeal disables delete for unsaved appeals

| Field | Value |
| --- | --- |
| **Statement** | Appeal disables delete for unsaved appeals. |
| **Trigger** | [Appeal](../screens/frm-appeal.md) loads a new, unsaved appeal row. |
| **Enforcement** | `frmAppeal.aspx.vb` disables the Delete button for new appeals. |
| **Outcome** | Users cannot delete a row that has not yet been persisted. |
| **Origin** | [Appeal](../screens/frm-appeal.md) |
| **Reached from** | [Appeal](../screens/frm-appeal.md) |
| **Source** | `Legal\frmAppeal.aspx.vb` |

---

## BR-SCR-015 Appeal loads Federal vs State schedule reference data

| Field | Value |
| --- | --- |
| **Statement** | Appeal loads different schedule types and hearing locations for Federal versus State cases. |
| **Trigger** | [Appeal](../screens/frm-appeal.md) loads or switches the active case. |
| **Enforcement** | `frmAppeal.aspx.vb` branches on case type when populating oral-argument reference data. |
| **Outcome** | Appeal scheduling uses the reference data appropriate to the case type. |
| **Origin** | [Appeal](../screens/frm-appeal.md) |
| **Reached from** | [Appeal](../screens/frm-appeal.md) |
| **Source** | `Legal\frmAppeal.aspx.vb` |

---

## BR-SCR-016 Appeal brief dates are client-side auto-calculated

| Field | Value |
| --- | --- |
| **Statement** | Appeal auto-calculates brief dates from due-date changes.* |
| **Trigger** | A user changes brief due dates on [Appeal](../screens/frm-appeal.md). |
| **Enforcement** | `Appeal.js` callbacks recalculate brief dates in response to date changes.* |
| **Outcome** | Related brief date fields are updated without a separate server round trip.* |
| **Origin** | [Appeal](../screens/frm-appeal.md) |
| **Reached from** | [Appeal](../screens/frm-appeal.md) |
| **Source** | `Legal\frmAppeal.aspx`; `Legal\Scripts\Appeal.js` |

---

## BR-SCR-017 Assignment review date must fall within the allowed range

| Field | Value |
| --- | --- |
| **Statement** | Assignment review date must fall between 1/1/2003 and 1/1/2053. |
| **Trigger** | A user reviews assignments on [Assignment](../screens/frm-assignment.md). |
| **Enforcement** | `frmAssignment.aspx.vb` validates the review date before processing. |
| **Outcome** | Out-of-range review dates are rejected. |
| **Origin** | [Assignment](../screens/frm-assignment.md) |
| **Reached from** | [Assignment](../screens/frm-assignment.md) |
| **Source** | `Legal\frmAssignment.aspx.vb` |

---

## BR-SCR-018 Assignment run is disabled in view-only mode

| Field | Value |
| --- | --- |
| **Statement** | Assignment disables Run Assignment in view-only mode. |
| **Trigger** | [Assignment](../screens/frm-assignment.md) renders for a user without update access. |
| **Enforcement** | `frmAssignment.aspx.vb` disables `bt_assign` when the manager is view-only. |
| **Outcome** | View-only users can review results but cannot execute assignment processing. |
| **Origin** | [Assignment](../screens/frm-assignment.md) |
| **Reached from** | [Assignment](../screens/frm-assignment.md) |
| **Source** | `Legal\frmAssignment.aspx.vb` |

---

## BR-SCR-019 Case Cost provider location must be numeric and resolve to a provider

| Field | Value |
| --- | --- |
| **Statement** | Case Cost requires a numeric provider location that resolves in the provider database. |
| **Trigger** | A user edits provider information on [Case Cost](../screens/frm-case-cost.md). |
| **Enforcement** | `frmCaseCost.aspx.vb` validates provider location format and existence before save. |
| **Outcome** | Invalid provider references block the case-cost save. |
| **Origin** | [Case Cost](../screens/frm-case-cost.md) |
| **Reached from** | [Case Cost](../screens/frm-case-cost.md) |
| **Source** | `Legal\frmCaseCost.aspx.vb` |

---

## BR-SCR-020 Case Cost row switch is blocked until current edits are saved

| Field | Value |
| --- | --- |
| **Statement** | Case Cost blocks row switching until current edits are saved. |
| **Trigger** | A user selects a different cost row on [Case Cost](../screens/frm-case-cost.md) while edits are dirty. |
| **Enforcement** | `frmCaseCost.aspx.vb` checks row-level dirty state before switching rows. |
| **Outcome** | The screen prevents accidental loss of in-progress edits. |
| **Origin** | [Case Cost](../screens/frm-case-cost.md) |
| **Reached from** | [Case Cost](../screens/frm-case-cost.md) |
| **Source** | `Legal\frmCaseCost.aspx.vb` |

---

## BR-SCR-021 Case Cost case switch warns when edits are dirty

| Field | Value |
| --- | --- |
| **Statement** | Case Cost warns before switching cases with unsaved edits. |
| **Trigger** | A user changes the case selector on [Case Cost](../screens/frm-case-cost.md). |
| **Enforcement** | `frmCaseCost.aspx.vb` checks case-level dirty state before switching case context. |
| **Outcome** | The user is warned before the screen abandons unsaved changes. |
| **Origin** | [Case Cost](../screens/frm-case-cost.md) |
| **Reached from** | [Case Cost](../screens/frm-case-cost.md) |
| **Source** | `Legal\frmCaseCost.aspx.vb` |

---

## BR-SCR-022 Create File letter date cannot be in the past

| Field | Value |
| --- | --- |
| **Statement** | Create File rejects a past letter date. |
| **Trigger** | A user saves [Create File](../screens/frm-create-file.md). |
| **Enforcement** | `frmCreateFile.aspx.vb` validates the entered letter date before save. |
| **Outcome** | The save is blocked until the date is current or future. |
| **Origin** | [Create File](../screens/frm-create-file.md) |
| **Reached from** | [Create File](../screens/frm-create-file.md) |
| **Source** | `Legal\frmCreateFile.aspx.vb` |

---

## BR-SCR-023 Create File letter date is auto-adjusted to the next business day

| Field | Value |
| --- | --- |
| **Statement** | Create File auto-adjusts a non-business-day letter date to the next work day. |
| **Trigger** | A user enters a letter date on [Create File](../screens/frm-create-file.md). |
| **Enforcement** | `frmCreateFile.aspx.vb` applies business-day adjustment before save. |
| **Outcome** | Created letter dates land on a valid business day. |
| **Origin** | [Create File](../screens/frm-create-file.md) |
| **Reached from** | [Create File](../screens/frm-create-file.md) |
| **Source** | `Legal\frmCreateFile.aspx.vb` |

---

## BR-SCR-024 Mail Date blocks list-type switching while edits are unsaved

| Field | Value |
| --- | --- |
| **Statement** | Mail Date blocks list-type switching while edits are unsaved. |
| **Trigger** | A user changes the OAR/Reconsideration toggle on [Mail Date](../screens/frm-mail-date.md). |
| **Enforcement** | `frmMailDate.aspx.vb` checks dirty state before allowing the switch. |
| **Outcome** | The current edits must be resolved before the user changes list context. |
| **Origin** | [Mail Date](../screens/frm-mail-date.md) |
| **Reached from** | [Mail Date](../screens/frm-mail-date.md) |
| **Source** | `Legal\frmMailDate.aspx.vb` |

---

## BR-SCR-025 Mail Date validates the mailed date through MailDateList messages

| Field | Value |
| --- | --- |
| **Statement** | Mail Date validates mailed dates through MailDateList warning and error messages. |
| **Trigger** | A user changes the mailed date on [Mail Date](../screens/frm-mail-date.md). |
| **Enforcement** | `frmMailDate.aspx.vb` reads validation feedback from the `MailDateList` collection. |
| **Outcome** | Users receive validation feedback before the mail-date update is persisted. |
| **Origin** | [Mail Date](../screens/frm-mail-date.md) |
| **Reached from** | [Mail Date](../screens/frm-mail-date.md) |
| **Source** | `Legal\frmMailDate.aspx.vb` |

---

## BR-SCR-026 Other Parties warns before case switch with unsaved edits

| Field | Value |
| --- | --- |
| **Statement** | Other Parties warns before case switch with unsaved edits. |
| **Trigger** | A user switches cases on [Other Parties](../screens/frm-other-parties.md). |
| **Enforcement** | `frmOtherParties.aspx.vb` checks dirty state before allowing the case switch. |
| **Outcome** | The current edits are preserved until the user addresses the warning. |
| **Origin** | [Other Parties](../screens/frm-other-parties.md) |
| **Reached from** | [Other Parties](../screens/frm-other-parties.md) |
| **Source** | `Legal\frmOtherParties.aspx.vb` |

---

## BR-SCR-027 Outcomes blocks row switching while the current outcome is dirty

| Field | Value |
| --- | --- |
| **Statement** | Outcomes blocks row switching while the current outcome has unsaved edits. |
| **Trigger** | A user switches outcome rows on [Outcomes](../screens/frm-outcomes.md). |
| **Enforcement** | `frmOutcomes.aspx.vb` checks dirty state before switching rows. |
| **Outcome** | The user must save or abandon current edits before moving to another outcome. |
| **Origin** | [Outcomes](../screens/frm-outcomes.md) |
| **Reached from** | [Outcomes](../screens/frm-outcomes.md) |
| **Source** | `Legal\frmOutcomes.aspx.vb` |

---

## BR-SCR-028 Outcomes Close Case action sets case status

| Field | Value |
| --- | --- |
| **Statement** | Outcomes Close Case changes case status through manager logic.* |
| **Trigger** | A user clicks Close Case on [Outcomes](../screens/frm-outcomes.md). |
| **Enforcement** | `frmOutcomes.aspx.vb` invokes `Manager.CloseCase()` from the close action.* |
| **Outcome** | The case status is updated through the manager's close-case path.* |
| **Origin** | [Outcomes](../screens/frm-outcomes.md) |
| **Reached from** | [Outcomes](../screens/frm-outcomes.md) |
| **Source** | `Legal\frmOutcomes.aspx.vb` |

---

## BR-SCR-029 Outcomes disable edit actions when no order exists or access is view-only

| Field | Value |
| --- | --- |
| **Statement** | Outcomes disables edit actions when no order exists or the screen is view-only. |
| **Trigger** | [Outcomes](../screens/frm-outcomes.md) loads current row and access state. |
| **Enforcement** | `frmOutcomes.aspx.vb` enables or disables insert/delete actions based on outcome existence and access level. |
| **Outcome** | Users cannot modify orders, staff, or issues when the screen context does not permit editing. |
| **Origin** | [Outcomes](../screens/frm-outcomes.md) |
| **Reached from** | [Outcomes](../screens/frm-outcomes.md) |
| **Source** | `Legal\frmOutcomes.aspx.vb` |

---

## BR-SCR-030 Summary falls back to Recon Packet Received date when OAR Mailed date is empty

| Field | Value |
| --- | --- |
| **Statement** | Summary falls back to Recon Packet Received when OAR Mailed is empty. |
| **Trigger** | [Case Summary](../screens/frm-summary.md) renders mailed-date information for the current case. |
| **Enforcement** | `frmSummary.aspx.vb` uses the recon-packet-received value when OAR mailed date is blank. |
| **Outcome** | The screen still shows a usable mailed-date value when OAR mailed date is unavailable. |
| **Origin** | [Case Summary](../screens/frm-summary.md) |
| **Reached from** | [Case Summary](../screens/frm-summary.md) |
| **Source** | `Legal\frmSummary.aspx.vb` |

---

## BR-SCR-031 Attorney Time Off retrieval is capped at 150 rows

| Field | Value |
| --- | --- |
| **Statement** | Attorney Time Off retrieval is capped at 150 rows. |
| **Trigger** | A user retrieves records on [Attorney Time Off](../screens/frm-time-off.md). |
| **Enforcement** | `frmTimeOff.aspx.vb` limits the retrieval result size. |
| **Outcome** | Oversized result sets are curtailed to 150 rows. |
| **Origin** | [Attorney Time Off](../screens/frm-time-off.md) |
| **Reached from** | [Attorney Time Off](../screens/frm-time-off.md) |
| **Source** | `Legal\frmTimeOff.aspx.vb` |

---

## BR-SCR-032 Update Case disables save and most controls in view-only mode

| Field | Value |
| --- | --- |
| **Statement** | Update Case disables save and most controls in view-only mode. |
| **Trigger** | [Update Case](../screens/frm-update-case.md) renders for a view-only user. |
| **Enforcement** | `frmUpdateCase.aspx.vb` disables save and all controls except the alerts grid and case selector. |
| **Outcome** | View-only users can inspect the screen but cannot edit case fields. |
| **Origin** | [Update Case](../screens/frm-update-case.md) |
| **Reached from** | [Update Case](../screens/frm-update-case.md) |
| **Source** | `Legal\frmUpdateCase.aspx.vb` |

---

## BR-SCR-033 Update Case runs dirty and validity checks before save

| Field | Value |
| --- | --- |
| **Statement** | Update Case runs dirty and validity checks before save. |
| **Trigger** | A user saves [Update Case](../screens/frm-update-case.md). |
| **Enforcement** | `frmUpdateCase.aspx.vb` checks dirty state and validation before write behavior executes. |
| **Outcome** | Invalid or unchanged edits do not proceed as a normal save. |
| **Origin** | [Update Case](../screens/frm-update-case.md) |
| **Reached from** | [Update Case](../screens/frm-update-case.md) |
| **Source** | `Legal\frmUpdateCase.aspx.vb` |

---

## Library business rules in scope

Rules defined in a library this application consumes, on a code path this application executes. Each rule keeps its canonical library rule ID; the library's own `business-rules.md` remains the rule's home page, and the **Origin** field links to it.

## BR-CLM-001 Conflict-claim access restriction

| Field | Value |
| --- | --- |
| **Statement** | A user without conflict-claim access cannot fully access a claim flagged as a worker conflict unless a security override applies. |
| **Trigger** | `ClaimAppManager.OnCheckSecurity()` runs after claim context changes to a worker-conflict claim. |
| **Enforcement** | `ClaimSecurity.CheckClaim` clears conflict access and `ClaimAppManager.OnCheckSecurity()` calls `MarkNoAccess()` unless `CheckForSecurityOverride()` succeeds. |
| **Outcome** | Full claim access is denied and a confidential-claim error message is shown when the user lacks the required access. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-001-conflict-claim-access-restriction) — `ClaimAppManager` / `ClaimSecurity` |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md), [Case Search](../screens/frm-case-search.md) |
| **Source** | `SAIF.Application.Claim\ClaimAppManager.vb`; `SAIF.Application.Claim\ClaimSecurity.vb` |

---

## BR-CLM-002 Exposure-claim access restriction

| Field | Value |
| --- | --- |
| **Statement** | A user without exposure-claim access does not retain exposure access to a claim flagged as an exposure claim. |
| **Trigger** | `ClaimSecurity.CheckClaim(inClaim)` evaluates an exposure claim during context change. |
| **Enforcement** | `ClaimSecurity.CheckClaim` sets `m_ExposureAccess = False` when `inClaim.IsExposure` and the user lacks exposure access. |
| **Outcome** | Downstream callers see `ClaimSecurity.ExposureAccess = False` and must restrict exposure-related data. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-002-exposure-claim-access-restriction) — `ClaimSecurity` |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| **Source** | `SAIF.Application.Claim\ClaimSecurity.vb` |

---

## BR-CLM-003 Health-issue claim access restriction

| Field | Value |
| --- | --- |
| **Statement** | A health-issue exposure claim clears health-issue access when exposure access is missing. |
| **Trigger** | `ClaimSecurity.CheckClaim(inClaim)` evaluates a claim flagged both `IsHealthIssue` and `IsExposure`. |
| **Enforcement** | `ClaimSecurity.CheckClaim` sets `m_HealthIssueAccess = False` when the user lacks exposure access. |
| **Outcome** | Downstream claim consumers see health-issue access denied on that combined claim condition. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-003-health-issue-claim-access-restriction) — `ClaimSecurity` |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| **Source** | `SAIF.Application.Claim\ClaimSecurity.vb`; `SAIF.Application.Claim\ClaimUserAccess.vb` |

---

## BR-CLM-004 Hostile secure claim access restriction

| Field | Value |
| --- | --- |
| **Statement** | A user without secure-claim access does not retain secure-claim access to a claim flagged as involving a hostile worker. |
| **Trigger** | `ClaimSecurity.CheckClaim(inClaim)` evaluates a hostile-worker claim during context change. |
| **Enforcement** | `ClaimSecurity.CheckClaim` sets `m_SecureClaimAccess = False` when `inClaim.IsHostileWorker` and the user lacks secure-claim access. |
| **Outcome** | Downstream claim consumers see secure-claim access denied for hostile-worker claim content. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-004-hostile-secure-claim-access-restriction) — `ClaimSecurity` |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md) |
| **Source** | `SAIF.Application.Claim\ClaimSecurity.vb` |

---

## BR-CLM-LGL-001 Case cost date ranges must be valid

| Field | Value |
| --- | --- |
| **Statement** | Case cost authorized date and service dates must fall within valid ranges, and the service-to date must be on or after the service-from date. |
| **Trigger** | A user saves or edits a case-cost entry. |
| **Enforcement** | `clsCaseCost` runs its authorization-date, service-date, and range-validation rules before save. |
| **Outcome** | The case-cost save is blocked until the dates are valid and ordered. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-001-case-cost-date-ranges-must-be-valid) — `clsCaseCost` |
| **Reached from** | [Capture and approve case costs](operations/capture-and-approve-case-costs.md), [Case Cost](../screens/frm-case-cost.md) |
| **Tables** | [CASE_COST](../libraries/saif-business-claim-legal/database-tables.md#case_cost) |
| **SQL** | [DB-CLL-002](../libraries/saif-business-claim-legal/sql/SQL-002-casecost.md), [DB-CLL-003](../libraries/saif-business-claim-legal/sql/SQL-003-casecost.md) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsCaseCost.vb` |

---

## BR-CLM-LGL-002 Case cost entry requires a payee

| Field | Value |
| --- | --- |
| **Statement** | A case cost entry must identify a payee firm or payee name. |
| **Trigger** | A user saves a case-cost entry. |
| **Enforcement** | `clsCaseCost` validates payee presence before persisting the row. |
| **Outcome** | The case-cost save is blocked until a payee is supplied. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-002-case-cost-entry-requires-a-payee) — `clsCaseCost` |
| **Reached from** | [Capture and approve case costs](operations/capture-and-approve-case-costs.md), [Case Cost](../screens/frm-case-cost.md) |
| **Tables** | [CASE_COST](../libraries/saif-business-claim-legal/database-tables.md#case_cost) |
| **SQL** | [DB-CLL-002](../libraries/saif-business-claim-legal/sql/SQL-002-casecost.md), [DB-CLL-003](../libraries/saif-business-claim-legal/sql/SQL-003-casecost.md) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsCaseCost.vb` |

---

## BR-CLM-LGL-003 Case cost entry requires service code, authorizer, and canceller

| Field | Value |
| --- | --- |
| **Statement** | A case cost entry requires a valid service code, authorizer, and, when the row is cancelled, a canceller. |
| **Trigger** | A user saves a case-cost entry. |
| **Enforcement** | `clsCaseCost` validates service-code, authorizer, and cancelled-by fields during save. |
| **Outcome** | Missing required fields prevent the case-cost row from being saved. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-003-case-cost-entry-requires-service-code%2C-authorizer%2C-and-canceller) — `clsCaseCost` |
| **Reached from** | [Capture and approve case costs](operations/capture-and-approve-case-costs.md), [Case Cost](../screens/frm-case-cost.md) |
| **Tables** | [CASE_COST](../libraries/saif-business-claim-legal/database-tables.md#case_cost) |
| **SQL** | [DB-CLL-002](../libraries/saif-business-claim-legal/sql/SQL-002-casecost.md), [DB-CLL-003](../libraries/saif-business-claim-legal/sql/SQL-003-casecost.md) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsCaseCost.vb` |

---

## BR-CLM-LGL-004 Case search input must match search-type format

| Field | Value |
| --- | --- |
| **Statement** | Case search input must match the format required by the selected search type, including required lengths and last-name requirements. |
| **Trigger** | A user submits search criteria from [Case Search](../screens/frm-case-search.md). |
| **Enforcement** | `clsCaseSearchCriteria` validates search-type-specific input rules before search execution. |
| **Outcome** | Invalid search criteria are rejected until they match the expected format. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-004-case-search-input-must-match-search-type-format) — `clsCaseSearchCriteria` |
| **Reached from** | [Search and open a legal case](operations/search-and-open-a-legal-case.md), [Case Search](../screens/frm-case-search.md) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsCaseSearchCriteria.vb` |

---

## BR-CLM-LGL-011 Attorney schedule dates must be valid and non-past

| Field | Value |
| --- | --- |
| **Statement** | An attorney schedule entry's effective and expiration dates must each be today or later, and expiration must be on or after effective. |
| **Trigger** | A user saves attorney time-off or assignment schedule data. |
| **Enforcement** | `clsAttorneySchedule` validates effective and expiration dates before save. |
| **Outcome** | Past or out-of-order schedule dates are rejected. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-011-attorney-schedule-dates-must-be-valid-and-non-past) — `clsAttorneySchedule` |
| **Reached from** | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md), [Attorney Time Off](../screens/frm-time-off.md) |
| **Tables** | [ATTORNEY_SCHEDULE](../libraries/saif-business-claim-legal/database-tables.md#attorney_schedule) |
| **Source** | `SAIF.Business.Claim.Legal\TableMaint\clsAttorneyWorkerAssignment.vb` |

---

## BR-CLM-LGL-023 Worker-attorney display fallback chain

| Field | Value |
| --- | --- |
| **Statement** | Worker-attorney display falls back from attorney name to firm name to worker name when the preferred field is empty. |
| **Trigger** | The application renders attorney or contact display values for case summary or related printed representations. |
| **Enforcement** | `clsLetterRequest.GetWorkerAttorney` and summary display logic apply the fallback chain. |
| **Outcome** | The UI shows a usable worker-attorney label even when preferred fields are blank. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-023-worker-attorney-display-fallback-chain) — `clsLetterRequest` |
| **Reached from** | [Case Summary](../screens/frm-summary.md) |
| **Source** | `SAIF.Business.Claim.Legal\Print\clsLetterRequest.vb`; `Legal\frmSummary.aspx.vb` |

---

## BR-CLM-LGL-027 Case status propagates to consolidated secondary cases

| Field | Value |
| --- | --- |
| **Statement** | Updating a primary legal-case status also updates every secondary case linked through `CONSOLIDATED_CASE`. |
| **Trigger** | A primary case status update is persisted in the legal-case workflow. |
| **Enforcement** | `pk80001_legalnet.updateCaseStatus` updates the primary row and its consolidated secondary rows. |
| **Outcome** | Primary and secondary consolidated cases keep the same status and audit values. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-027-case-status-propagates-to-consolidated-secondary-cases) — `pk80001_legalnet.updateCaseStatus` |
| **Reached from** | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md), [Outcomes](../screens/frm-outcomes.md) |
| **Tables** | [LEGAL_CASE](../libraries/saif-business-claim-legal/database-tables.md#legal_case), [CONSOLIDATED_CASE](../libraries/saif-business-claim-legal/database-tables.md#consolidated_case) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsConsolidations.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsLegalCase.vb` |

---

## BR-CLM-LGL-028 Appeal deletion cascades schedule and state cleanup

| Field | Value |
| --- | --- |
| **Statement** | Deleting an appeal also deletes linked extension rows and schedules, recalculates hearing sequence, and repopulates related case or file-location state when needed. |
| **Trigger** | A user deletes an appeal from the appeal workflow. |
| **Enforcement** | `pk80001_legalnet.deleteappeal` performs the linked cleanup sequence. |
| **Outcome** | Appeal deletion does not leave stale extension, schedule, or derived state records behind. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-028-appeal-deletion-cascades-schedule-and-state-cleanup) — `pk80001_legalnet.deleteappeal` |
| **Reached from** | [File and maintain appeals](operations/file-and-maintain-appeals.md), [Appeal](../screens/frm-appeal.md) |
| **Tables** | [APPEAL](../libraries/saif-business-claim-legal/database-tables.md#appeal), [APPEAL_EXTENSION](../libraries/saif-business-claim-legal/database-tables.md#appeal_extension), [SCHEDULE](../libraries/saif-business-claim-legal/database-tables.md#schedule), [LEGAL_FILE_LOCATION](../libraries/saif-business-claim-legal/database-tables.md#legal_file_location) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsAppeal.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsAppealCollection.vb` |

---

## BR-CLM-LGL-030 Schedule retrieval includes consolidated-primary schedules for secondary cases

| Field | Value |
| --- | --- |
| **Statement** | Schedule retrieval returns direct schedule rows for a case plus primary-case schedules when the requested case is a consolidated secondary case. |
| **Trigger** | The application loads schedule data for a secondary consolidated case. |
| **Enforcement** | `pk80001_legalnet.getSchedule` includes the secondary case's direct rows and the primary case's schedule rows. |
| **Outcome** | Users viewing a secondary case can still see the primary hearing activity that governs it. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-030-schedule-retrieval-includes-consolidated-primary-schedules-for-secondary-cases) — `pk80001_legalnet.getSchedule` |
| **Reached from** | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md), [Schedule](../screens/frm-schedule.md) |
| **Tables** | [SCHEDULE](../libraries/saif-business-claim-legal/database-tables.md#schedule), [CONSOLIDATED_CASE](../libraries/saif-business-claim-legal/database-tables.md#consolidated_case) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsSchedule.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsConsolidations.vb` |

---

## BR-CLM-LGL-031 Mail and acknowledgement updates are type-driven

| Field | Value |
| --- | --- |
| **Statement** | Mail-date and acknowledgement updates modify only the identifier and date columns associated with the caller's declared type. |
| **Trigger** | A user saves mail-date, acknowledgement, or create-file updates. |
| **Enforcement** | `pk80001_legalnet.setMailDate` and `pk80001_legalnet.updateAcknowledged` branch by request type before updating `LEGAL_CASE`. |
| **Outcome** | OAR, recon, WCB, and DCBS workflows update only their intended columns. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-031-mail-and-acknowledgement-updates-are-type-driven) — `pk80001_legalnet.setMailDate` / `updateAcknowledged` |
| **Reached from** | [Process mail dates, acknowledgements, and file creation](operations/process-mail-dates-acknowledgements-and-file-creation.md), [Mail Date](../screens/frm-mail-date.md), [Acknowledge](../screens/frm-acknowledge.md), [Create File](../screens/frm-create-file.md) |
| **Tables** | [LEGAL_CASE](../libraries/saif-business-claim-legal/database-tables.md#legal_case) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsMailDate.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsAcknowledge.vb`; `SAIF.Business.Claim.Legal\LegalNet\clsCreateFileManager.vb` |

---

## BR-CLM-LGL-032 Assignment only succeeds when every blocker count is zero

| Field | Value |
| --- | --- |
| **Statement** | Assignment succeeds only when the sum of conflict, workload, holiday, vacation, and location blocker counts is zero. |
| **Trigger** | The assignment engine evaluates a candidate attorney. |
| **Enforcement** | `pk80005_assignment.assignIt` and `assignItBalanced` test blocker counts before writing the assignment result. |
| **Outcome** | Cases remain unassigned for that candidate when any blocker count is non-zero. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-032-assignment-only-succeeds-when-every-blocker-count-is-zero) — `pk80005_assignment` |
| **Reached from** | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md), [Assignment](../screens/frm-assignment.md) |
| **Tables** | [SCHEDULE](../libraries/saif-business-claim-legal/database-tables.md#schedule), [LEGAL_CASE](../libraries/saif-business-claim-legal/database-tables.md#legal_case) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsAssignmentProcess.vb` |

---

## BR-CLM-LGL-033 Weekly load thresholds vary by attorney load percent

| Field | Value |
| --- | --- |
| **Statement** | When weekly-load checking is enabled, attorneys below 34 percent load are capped at one hearing day, attorneys below 67 percent at two, and all others at three before load blocks assignment. |
| **Trigger** | The assignment engine runs weekly-load checks for a candidate attorney. |
| **Enforcement** | `pk80005_assignment.assignIt` applies the load-percentage threshold logic before assignment. |
| **Outcome** | Lower-capacity attorneys hit load-based rejection sooner than higher-capacity attorneys. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-033-weekly-load-thresholds-vary-by-attorney-load-percent) — `pk80005_assignment` |
| **Reached from** | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md), [Assignment](../screens/frm-assignment.md) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsAssignmentProcess.vb` |

---

## BR-CLM-LGL-034 Rotation assignment only targets pending unassigned hearing rows in active rotation coverage

| Field | Value |
| --- | --- |
| **Statement** | Rotation assignment evaluates only pending, unassigned `HEAR` schedule rows in active rotation coverage and skips recon-issue hearings. |
| **Trigger** | Rotation-based assignment processing runs. |
| **Enforcement** | `pk80005_assignment.assign_rotation_cases` filters eligible cases, schedules, rotation rows, and request issues before assignment. |
| **Outcome** | Rotation logic ignores already-assigned, out-of-scope, or recon-issue hearings. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-034-rotation-assignment-only-targets-pending-unassigned-hearing-rows-in-active-rotation-coverage) — `pk80005_assignment` |
| **Reached from** | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md), [Assignment](../screens/frm-assignment.md) |
| **Tables** | [LEGAL_CASE](../libraries/saif-business-claim-legal/database-tables.md#legal_case), [SCHEDULE](../libraries/saif-business-claim-legal/database-tables.md#schedule), [OUT_OF_TOWN_ROTATION_ASSGN](../libraries/saif-business-claim-legal/database-tables.md#out_of_town_rotation_assgn), [REQUEST_ISSUE](../libraries/saif-business-claim-legal/database-tables.md#request_issue) |
| **Source** | `SAIF.Business.Claim.Legal\LegalNet\clsAssignmentProcess.vb` |

---

## BR-LGL-004 Printing a DEF letter marks the case DEF-sent

| Field | Value |
| --- | --- |
| **Statement** | Printing a Defense Evaluation Form letter marks the case as DEF-sent as of today and clears the pending-send flag. |
| **Trigger** | The schedule workflow prints a DEF letter from save processing or popup confirmation. |
| **Enforcement** | `clsScheduleManager.PrintDEF()` sets `DefSentDate`, keeps `SendDefFlag` affirmed, and resets the internal pending flag. |
| **Outcome** | The case records that a DEF letter was sent and no longer treats the same send as pending. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-004-printing-a-def-letter-marks-the-case-def-sent) — `clsScheduleManager` |
| **Reached from** | [Manage schedules, file locations, and LCEs](operations/manage-schedules-file-locations-and-lces.md), [Schedule](../screens/frm-schedule.md) |
| **SQL** | [SQL-001](../libraries/saif-application-claim-legal/sql/SQL-001-insert-letter-request.md) |
| **Source** | `SAIF.Application.Claim.Legal\LegalNet\clsScheduleManager.vb` |

---

## BR-LGL-007 Hearing schedule sync to Guidewire requires an assigned attorney

| Field | Value |
| --- | --- |
| **Statement** | A hearing schedule is synchronized to Guidewire only when an attorney is currently assigned. |
| **Trigger** | Schedule or assignment processing attempts Guidewire matter synchronization for a qualifying hearing event. |
| **Enforcement** | `clsScheduleManager.SendDataToGw` and `clsAssignmentManager.SendDataToGw` skip the Guidewire call when the attorney name is blank. |
| **Outcome** | No Guidewire matter is created or updated for unassigned hearings. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-007-hearing-schedule-sync-to-guidewire-requires-an-assigned-attorney) — `clsScheduleManager` / `clsAssignmentManager` |
| **Reached from** | [Run attorney assignment and calendar review](operations/run-attorney-assignment-and-calendar-review.md), [Schedule](../screens/frm-schedule.md), [Assignment](../screens/frm-assignment.md) |
| **Source** | `SAIF.Application.Claim.Legal\LegalNet\clsScheduleManager.vb`; `SAIF.Application.Claim.Legal\LegalNet\clsAssignmentManager.vb` |

---

## BR-LGL-011 Consolidation is rejected when a hearing is scheduled in the past for a Set Reset case

| Field | Value |
| --- | --- |
| **Statement** | A consolidation change is rejected when it would consolidate a case whose most recent hearing is scheduled in the past while in Set or Reset status. |
| **Trigger** | A user saves consolidation changes on [Request](../screens/frm-request.md). |
| **Enforcement** | `clsRequestManager.OnWrite` catches the consolidation error condition and appends a user-facing error message instead of completing save. |
| **Outcome** | The save returns false and the consolidation change is not applied. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-011-consolidation-is-rejected-when-a-hearing-is-scheduled-in-the-past-for-a-set-reset-case) — `clsRequestManager` |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Request](../screens/frm-request.md) |
| **Source** | `SAIF.Application.Claim.Legal\LegalNet\clsRequestManager.vb` |

---

## BR-VP-002 Secure-policy AD resource gate

| Field | Value |
| --- | --- |
| **Statement** | Access to a policy flagged with the SAIF secure-policy code requires the current security principal to hold the `SAIFpolicyInfo` AD resource. |
| **Trigger** | `clsPolicySecurity.IsPolicyValidForUser(clsPolicyData)` evaluates a secure policy for the current user. |
| **Enforcement** | `clsPolicySecurity` calls `SecurityPrincipal.IsAuthorized("SAIFpolicyInfo")` before allowing access. |
| **Outcome** | Secure policy access is denied when the caller lacks the required AD resource. |
| **Origin** | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-002-secure-policy-ad-resource-gate) — `clsPolicySecurity` |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Case Summary](../screens/frm-summary.md) |
| **Source** | `SAIF.Business.View.Policy\clsPolicySecurity.vb` |

---

## BR-VP-003 Policy validity and non-zero policy number required for access

| Field | Value |
| --- | --- |
| **Statement** | A policy must be valid and have a non-zero policy number to be accessible. |
| **Trigger** | `clsPolicySecurity.IsPolicyValidForUser` evaluates the current policy context. |
| **Enforcement** | `clsPolicySecurity` denies access when `IsValid` is false or the policy number is zero. |
| **Outcome** | Invalid or zero-number policies are not surfaced to the application as accessible policy context. |
| **Origin** | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-003-policy-validity-and-non-zero-policy-number-required-for-access) — `clsPolicySecurity` |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Case Summary](../screens/frm-summary.md) |
| **Source** | `SAIF.Business.View.Policy\clsPolicySecurity.vb`; `SAIF.Business.View.Policy\clsPolicyData.vb` |

---

## BR-VP-010 Demo-user agency agent data masking

| Field | Value |
| --- | --- |
| **Statement** | Demo users see agency and agent names masked, except for the literal `SAIF`, and related contact fields are replaced with masking constants. |
| **Trigger** | A demo user views agency or agent data in policy context. |
| **Enforcement** | `clsAgency` masks agency, agent, phone, address, and email properties for demo access levels. |
| **Outcome** | Agency and agent PII are not exposed to demo users. |
| **Origin** | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-010-demo-user-agency-agent-data-masking) — `clsAgency` |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Case Summary](../screens/frm-summary.md) |
| **Source** | `SAIF.Business.View.Policy\clsAgency.vb` |

---

## BR-VP-011 Demo-user address contact data masking

| Field | Value |
| --- | --- |
| **Statement** | Demo users see masked policy contact, phone, email, and Officer of Notice values, and the Officer-of-Notice lookup is skipped. |
| **Trigger** | A demo user views policy address or contact data in policy context. |
| **Enforcement** | `clsPolicyAddress` replaces contact values with masking constants for demo access levels. |
| **Outcome** | Policyholder contact PII is not exposed to demo users. |
| **Origin** | [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/business-rules.md#br-vp-011-demo-user-address-contact-data-masking) — `clsPolicyAddress` |
| **Reached from** | [Manage a legal case request](operations/manage-a-legal-case-request.md), [Case Summary](../screens/frm-summary.md) |
| **Tables** | [BUSINESS_AFFILIATE](../libraries/saif-business-view-policy/database-tables.md#business_affiliate), [AFFILIATE](../libraries/saif-business-view-policy/database-tables.md#affiliate) |
| **SQL** | [SQL-VP-007](../libraries/saif-business-view-policy/sql/SQL-007-retrieveofficerofnoticesql.md) |
| **Source** | `SAIF.Business.View.Policy\clsPolicyAddress.vb` |

---

## Inherited business rules

No inherited business rules were included in scope for this rerun. Cached Legends results in this repository describe only generic framework behavior and do not provide application-specific inherited rule paths that can be confidently tied to this application's reachable execution paths.

## Rules not reachable from this application

Rules documented in a consumed library that no application execution path reaches. Listed for completeness so a reader can distinguish "not applicable here" from "missed".

| Library | Rule ID | Statement | Reason not reachable |
| --- | --- | --- | --- |
| [SAIF.Application](../libraries/saif-application/overview.md) | [BR-APP-001](../libraries/saif-application/business-rules.md#br-app-001-non-empty%2C-non-duplicate-message-accumulation) | Message accumulation suppresses empty and duplicate appended messages. | A structural base-class behavior was documented in the library, but no screen, workflow, or application page in this repo traces a reachable business workflow that depends on this rule as an application-visible business rule. |
| [SAIF.Application](../libraries/saif-application/overview.md) | [BR-APP-003](../libraries/saif-application/business-rules.md#br-app-003-cached-ad-resource-authorization-result) | Resource authorization results are cached for the lifetime of a `UserAccess` instance. | Analysis artifacts do not trace an application workflow that treats this cache behavior as a business rule reachable from a specific screen or operation. |
| [SAIF.Application](../libraries/saif-application/overview.md) | [BR-APP-004](../libraries/saif-application/business-rules.md#br-app-004-retrieve-none-write-none-abstract-contract) | Concrete managers must implement their own retrieve and write members. | This is a compile-time framework contract, not a runtime application execution-path rule reached by users of this application. |
| [SAIF.Application.Claim](../libraries/saif-application-claim/overview.md) | [BR-CLM-005](../libraries/saif-application-claim/business-rules.md#br-clm-005-default-view-only-access-on-context-change) | Every successful context change resets access to view-only before later evaluation. | Its effect is subsumed into the application-composed access rule [BR-APP-002](#br-app-002-default-restricted-access-with-explicit-role-escalation), so it is not cataloged separately as a single-library reachable rule. |
| [SAIF.Application.Claim](../libraries/saif-application-claim/overview.md) | [BR-CLM-006](../libraries/saif-application-claim/business-rules.md#br-clm-006-blank-placeholder-claim-number-rejected) | Blank or placeholder claim numbers are rejected as claim context. | The current screen and operation artifacts do not trace this string-overload context-set path from a documented screen action in this application. |
| [SAIF.Application.Claim](../libraries/saif-application-claim/overview.md) | [BR-CLM-007](../libraries/saif-application-claim/business-rules.md#br-clm-007-claim-not-found-messaging) | Claim-not-found messaging persists when claim retrieval fails. | No current application workflow page or screen document traces the failure path as a reachable business rule anchor. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-001](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-001-admin-group-bypasses-claim-conflict-and-exposure-checks) | Legal admin users bypass conflict and exposure checks. | The application catalog records the broader composed access behavior in [BR-APP-001](#br-app-001-confidential-claim-access-gating) instead of repeating this narrower branch rule separately. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-002](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-002-worker-conflict-claims-require-conflict-and-exposure-access) | Worker-conflict claims require conflict and exposure access. | The application catalog records the broader composed confidential-claim gating rule in [BR-APP-001](#br-app-001-confidential-claim-access-gating). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-003](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-003-exposure-flagged-claims-require-exposure-access) | Exposure-flagged claims require exposure access. | The application catalog records the broader composed confidential-claim gating rule in [BR-APP-001](#br-app-001-confidential-claim-access-gating). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-005](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-005-non-production-def-email-reminders-are-redirected-to-the-current-user) | Non-production DEF email reminders are redirected to the current user. | Its effect is captured as part of the cross-library application rule [BR-APP-004](#br-app-004-non-production-safety-redirection). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-006](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-006-attorney-assignment-batch-process-runs-in-testing-mode-outside-production) | Assignment batch processing runs in testing mode outside Production. | Its effect is captured as part of the cross-library application rule [BR-APP-004](#br-app-004-non-production-safety-redirection). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-008](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-008-guidewire-and-wcd-integration-failures-never-fail-the-case-save) | Guidewire and WCD integration failures never fail the case save. | Its effect is captured as part of the cross-library application rule [BR-APP-006](#br-app-006-guidewire-integration-is-best-effort). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-009](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-009-worker-attorney-firm-change-creates-a-system-audit-case-note) | Worker-attorney firm change creates a system audit case note. | No application workflow or screen artifact explicitly traces this save branch as a distinct reached-from rule. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-010](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-010-worker-attorney-change-creates-a-system-audit-case-note) | Worker attorney change creates a system audit case note. | No application workflow or screen artifact explicitly traces this save branch as a distinct reached-from rule. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-012](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-012-secondary-consolidated-cases-mirror-the-primary-case-state) | Secondary consolidated cases mirror primary-case state. | Its effect is captured as part of the cross-library application rule [BR-APP-003](#br-app-003-consolidated-case-state-propagation). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-013](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-013-case-note-deletion-is-restricted-by-role-and-note-origin) | Case note deletion is restricted by role and note origin. | Its effect is captured as part of the cross-library application rule [BR-APP-005](#br-app-005-note-maintenance-and-deletion-restrictions). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-014](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-014-case-note-view-update-access-is-restricted-by-security-key) | Case note view and update access are restricted by security key. | Its effect is captured as part of the cross-library application rule [BR-APP-005](#br-app-005-note-maintenance-and-deletion-restrictions). |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-015](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-015-a-hearing-location-cannot-be-deleted-while-in-use) | Hearing locations cannot be deleted while in use. | No documented screen or workflow in `docs/application` or `docs/screens` reaches hearing-location maintenance in this application. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-016](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-016-a-legal-person-cannot-be-deleted-while-in-use) | Legal people cannot be deleted while in use. | No documented screen or workflow in `docs/application` or `docs/screens` reaches legal-person maintenance in this application. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-017](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-017-a-schedule-row-can-only-be-deleted-while-cancelled) | Schedule rows can be deleted only while Cancelled. | The current Schedule screen document records only admin gating for delete and does not trace this manager-level cancelled-status rule as a reached path. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-018](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-018-letter-requests-use-a-database-sequence-and-server-timestamp) | Letter requests use a database sequence and server timestamp. | This is an implementation detail of letter-request persistence rather than a user-facing application rule separately traced in current application workflows. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-019](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-019-manager-email-lookup-falls-back-from-assigned-attorney-to-outside-counsel) | Manager email lookup falls back from assigned attorney to outside counsel. | The current application artifacts do not trace the email-recipient fallback branch as a distinct reachable rule. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-020](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-020-header-case-number-prefers-wcb-then-dcbs-owcp-oalj-and-brb) | Header case number prefers WCB, then DCBS, then OWCP, OALJ, and BRB. | No current application workflow or screen doc cites this header-formatting branch as a distinct reached-from rule. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-021](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-021-header-attorney-display-prefers-appeal-attorney-then-hearing-attorney-then-outside-counsel) | Header attorney display prefers appeal attorney, then hearing attorney, then outside counsel. | No current application workflow or screen doc cites this header-formatting branch as a distinct reached-from rule. |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-LGL-022](../libraries/saif-application-claim-legal/business-rules.md#br-lgl-022-header-hearing-date-uses-the-latest-hearing-and-consolidation-context) | Header hearing date uses the latest hearing and consolidation context. | No current application workflow or screen doc cites this header-formatting branch as a distinct reached-from rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-005](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-005-non-single-row-crud-result-is-treated-as-a-failure) | Non-single-row CRUD results are treated as failures. | This persistence guard is cross-cutting plumbing and is not traced as a distinct application business rule in current screen and workflow artifacts. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-006](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-006-attorney-policy-assignment-requires-a-valid-policy) | Attorney policy assignment requires a valid policy. | No documented screen or workflow in this application reaches attorney-policy-assignment maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-007](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-007-attorney-policy-assignment-requires-a-primary-attorney) | Attorney policy assignment requires a primary attorney. | No documented screen or workflow in this application reaches attorney-policy-assignment maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-008](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-008-attorney-profile-requires-attorney%2C-type%2C-and-valid-date-range) | Attorney profiles require attorney, type, and a valid date range. | No documented screen or workflow in this application reaches attorney-profile maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-009](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-009-duplicate-attorney-profile-rows-are-rejected) | Duplicate attorney profile rows are rejected. | No documented screen or workflow in this application reaches attorney-profile maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-010](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-010-attorney-schedule-entry-requires-attorney%2C-reason%2C-and-duration) | Attorney schedule entries require attorney, reason, and duration. | The application's time-off screen only documents the date-range rule; current artifacts do not trace the required-code rule as a reachable path on that screen. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-012](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-012-hearing-location-requires-valid-code%2C-name%2C-state%2C-and-city) | Hearing locations require valid code, name, state, and city. | No documented screen or workflow in this application reaches hearing-location maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-013](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-013-hearing-location-cannot-be-deleted-while-referenced-by-schedule-rows) | Hearing locations cannot be deleted while referenced. | No documented screen or workflow in this application reaches hearing-location maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-014](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-014-legal-person-requires-last-and-first-name) | Legal-person records require last and first name. | No documented screen or workflow in this application reaches legal-person maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-015](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-015-legal-person-cannot-be-deleted-while-referenced) | Legal people cannot be deleted while referenced. | No documented screen or workflow in this application reaches legal-person maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-016](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-016-legal-person-type-link-requires-person-and-type-code) | Legal-person-type links require person and type code. | No documented screen or workflow in this application reaches legal-person-type maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-017](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-017-other-firm-state-city-must-be-valid) | Other-firm state and city values must be valid. | The Other Parties screen artifacts do not document this validation path as a distinct reached-from rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-018](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-018-out-of-town-rotation-assignment-dates-must-be-valid-and-non-past) | Out-of-town rotation assignment dates must be valid and non-past. | No documented screen or workflow in this application reaches out-of-town rotation maintenance. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-019](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-019-file-location-falls-back-to-a-sentinel-value-on-lookup-failure) | File-location assignee lookup falls back to `Bad data` on failure.* | Current screen and workflow artifacts do not document this fallback branch as a distinct reached-from rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-020](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-020-letter-hearing-date-renders-empty-rather-than-a-default-value) | Letter hearing date renders empty rather than a default value. | The current application artifacts do not trace this letter-formatting branch as a distinct rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-021](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-021-policy-short-name-truncation-and-special-case-substitution) | Policy short names are truncated and special-cased for `STATE OF OREGON`. | The current application artifacts do not trace this letter-formatting branch as a distinct rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-022](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-022-state-entity-attorney-title-override) | State-entity letters override the attorney title. | The current application artifacts do not trace this letter-formatting branch as a distinct rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-024](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-024-attorney-schedule-suppresses-non-production-exchange-sync) | Attorney schedule suppresses non-production Exchange sync. | Its environment-driven effect is rolled into [BR-APP-004](#br-app-004-non-production-safety-redirection). |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-025](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-025-consolidation-schedule-non-production-behavior-suppression) | Consolidation and schedule behavior differs outside Production.* | Its environment-driven effect is rolled into [BR-APP-004](#br-app-004-non-production-safety-redirection). |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-026](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-026-legal-case-search-falls-through-case-number-hierarchy) | Legal case search falls through WCB, DCBS, OWCP, OALJ, BRB, and appeal-number paths. | The screen and operation artifacts document format validation and search execution, but not this lower-level identifier fallback sequence as a distinct rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-029](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-029-hearing-sequence-fallback-prefers-consolidated-hear-then-direct-hear-then-other-hearing-like-schedules) | Hearing-sequence recalculation prefers consolidated `HEAR`, then direct `HEAR`, then other hearing-like schedules. | The current application artifacts do not trace this recalculation branch as a distinct reached-from rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-035](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-035-conflict-and-load-helper-functions-treat-missing-data-as-zero-blockers) | Conflict and load helper functions treat missing data as zero blockers. | The current application artifacts do not trace this helper behavior as a distinct rule separate from assignment success logic. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-036](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-036-calendar-review-filters-to-active-attorney-profiles-and-requested-coverage-locations) | Calendar review filters to active attorney profiles and requested coverage locations. | The Calendar Review screen has no Business rules section, and the workflow artifacts do not isolate this branch as a distinct reachable rule. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-CLM-LGL-037](../libraries/saif-business-claim-legal/business-rules.md#br-clm-lgl-037-assignment-result-reporting-keeps-the-latest-result-per-case-in-scope) | Assignment-result reporting keeps only the latest result per case in scope. | The current assignment screen and workflow artifacts do not document this reporting behavior as a distinct rule. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-001](../libraries/saif-business-policy/business-rules.md#br-pol-001-neutral-value-for-non-applicable-rate-factors) | Neutral value is returned for non-applicable rate factors. | No documented application workflow reaches policy rating or premium-calculation behavior. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-002](../libraries/saif-business-policy/business-rules.md#br-pol-002-no-qualifying-class-minimum-falls-back-to-default-manual-class-8810) | Missing qualifying class minimums fall back to manual class 8810. | No documented application workflow reaches policy rating or minimum-premium behavior. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-003](../libraries/saif-business-policy/business-rules.md#br-pol-003-voluntary-policies-before-april-1-2010-use-a-fixed-500-minimum-premium) | Older voluntary policies use a fixed minimum premium. | No documented application workflow reaches policy premium-calculation behavior. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-004](../libraries/saif-business-policy/business-rules.md#br-pol-004-combined-voluntary-minimums-prefer-the-highest-explicit-class-minimum) | Combined voluntary minimums prefer the highest explicit class minimum. | No documented application workflow reaches policy premium-calculation behavior. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-005](../libraries/saif-business-policy/business-rules.md#br-pol-005-arp-minimums-use-arp-specific-expense-constant-logic) | ARP minimums use ARP-specific expense-constant logic. | No documented application workflow reaches policy premium-calculation behavior. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-006](../libraries/saif-business-policy/business-rules.md#br-pol-006-submission-ownership-comes-from-the-status-code-ownership-flag) | Submission ownership comes from the status-code ownership flag. | No documented application workflow reaches submission-ownership derivation. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-007](../libraries/saif-business-policy/business-rules.md#br-pol-007-missing-or-failed-ownership-lookups-default-to-wcis) | Missing ownership lookups default to WCIS. | No documented application workflow reaches submission-ownership derivation. |
| [SAIF.Business.Policy](../libraries/saif-business-policy/overview.md) | [BR-POL-008](../libraries/saif-business-policy/business-rules.md#br-pol-008-pms-status-is-limited-to-pa-pc-and-pp) | PMS status is limited to PA, PC, and PP. | No documented application workflow reaches PMS status derivation. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-001](../libraries/saif-business-utilities/business-rules.md#br-util-001-blank-or-null-input-passthrough) | Blank or null input is passed through unchanged. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-002](../libraries/saif-business-utilities/business-rules.md#br-util-002-mixed-case-tokens-are-left-untouched) | Mixed-case tokens are left untouched. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-003](../libraries/saif-business-utilities/business-rules.md#br-util-003-known-all-caps-abbreviations-stay-upper-case) | Known all-caps abbreviations stay upper case. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-004](../libraries/saif-business-utilities/business-rules.md#br-util-004-known-connector-words-stay-lower-case) | Known connector words stay lower case. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-005](../libraries/saif-business-utilities/business-rules.md#br-util-005-known-mixed-case-exception-words-are-normalized) | Known mixed-case exception words are normalized. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-006](../libraries/saif-business-utilities/business-rules.md#br-util-006-ordinal-number-suffixes-are-lower-cased) | Ordinal number suffixes are lower-cased. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-007](../libraries/saif-business-utilities/business-rules.md#br-util-007-mc-o'-style-prefixes-get-a-second-inner-capital) | Mc/O'-style prefixes get a second inner capital. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-008](../libraries/saif-business-utilities/business-rules.md#br-util-008-possessive-'s-suffix-is-preserved-in-original-case) | Possessive `'s` suffix is preserved in original case. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-009](../libraries/saif-business-utilities/business-rules.md#br-util-009-first-character-of-output-is-always-forced-to-upper-case) | First output character is forced to upper case. | No documented application workflow or screen artifact identifies title-casing helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-010](../libraries/saif-business-utilities/business-rules.md#br-util-010-numbertotext-upper-bound-is-enforced) | NumberToText enforces an upper bound. | No documented application workflow or screen artifact identifies number-to-text helpers as a reached business-rule path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-UTIL-011](../libraries/saif-business-utilities/business-rules.md#br-util-011-zero-renders-as-an-empty-string%2C-not-the-word-%22zero%22) | Zero renders as an empty string. | No documented application workflow or screen artifact identifies number-to-text helpers as a reached business-rule path. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-001](../libraries/saif-business-view-policy/business-rules.md#br-vp-001-valid-policy-number-required) | Policy numbers must be greater than zero. | Its effect is subsumed into [BR-VP-003](#br-vp-003-policy-validity-and-non-zero-policy-number-required-for-access), which is the traced application entry point. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-004](../libraries/saif-business-view-policy/business-rules.md#br-vp-004-unconditional-access-for-internal-staff-user-types) | Internal staff user types are always granted access to non-SAIF-secured policies. | Current application artifacts document policy gating and masking but do not isolate user-type branch rules as distinct reached-from rules. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-005](../libraries/saif-business-view-policy/business-rules.md#br-vp-005-agent-ownership-match-required) | Agents may access policies only when ownership matches. | Current application artifacts do not isolate this user-type branch as a distinct reached-from rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-006](../libraries/saif-business-view-policy/business-rules.md#br-vp-006-policyholder-ownership-affiliation-match-required) | Policyholders may access only their own or parent-affiliated policies. | Current application artifacts do not isolate this user-type branch as a distinct reached-from rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-007](../libraries/saif-business-view-policy/business-rules.md#br-vp-007-group-membership-required) | Group users require policy-in-group membership. | Current application artifacts do not isolate this user-type branch as a distinct reached-from rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-008](../libraries/saif-business-view-policy/business-rules.md#br-vp-008-loss-control-consultant-assignment-match-required) | Loss-control consultants require team-assignment match. | Current application artifacts do not isolate this user-type branch as a distinct reached-from rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-009](../libraries/saif-business-view-policy/business-rules.md#br-vp-009-fee-auditor-vendor-policy-audit-record-match-required) | Fee auditors require a matching policy audit record. | Current application artifacts do not isolate this user-type branch as a distinct reached-from rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-012](../libraries/saif-business-view-policy/business-rules.md#br-vp-012-team-assignment-masking-preserves-real-username-for-authorization) | Team-assignment masking preserves the real username for authorization. | Current application artifacts do not trace team-assignment display or authorization as a distinct reachable path. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-013](../libraries/saif-business-view-policy/business-rules.md#br-vp-013-affiliated-policy-agent-agency-filter) | Affiliated-policy collections filter by agent and agency when requested. | No documented application workflow reaches affiliated-policy list behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-014](../libraries/saif-business-view-policy/business-rules.md#br-vp-014-non-employer-account-number-must-be-non-zero) | Non-employer account numbers must be non-zero. | No documented application workflow reaches non-employer-account behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-015](../libraries/saif-business-view-policy/business-rules.md#br-vp-015-specific-and-current-requests-prefer-policy-period-employer-liability-rows) | Specific and current limit requests prefer policy-period employer-liability rows. | No documented application workflow reaches policy-limit retrieval behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-016](../libraries/saif-business-view-policy/business-rules.md#br-vp-016-limit-retrieval-falls-back-to-standard-factor-rows-when-no-specific-override-exists) | Limit retrieval falls back to standard factor rows. | No documented application workflow reaches policy-limit retrieval behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-017](../libraries/saif-business-view-policy/business-rules.md#br-vp-017-future-and-historical-lookups-use-the-policy-periods-own-effective-context) | Future and historical lookups use policy-period effective context. | No documented application workflow reaches policy-limit retrieval behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-018](../libraries/saif-business-view-policy/business-rules.md#br-vp-018-gap-detection-ignores-flat-cancel-and-prospect-periods) | Gap detection ignores flat-cancel and prospect periods. | No documented application workflow reaches gap-detection behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-019](../libraries/saif-business-view-policy/business-rules.md#br-vp-019-assigned-risk-policy-periods-mask-risk-type-and-plan-data-until-the-info-page-prints) | Assigned-risk policy periods mask risk-type and plan data until info-page print. | No documented application workflow reaches policy-period detail retrieval behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-020](../libraries/saif-business-view-policy/business-rules.md#br-vp-020-claim-address-requests-may-fall-back-to-the-policy-address) | Claim-address requests may fall back to policy address. | No documented application workflow reaches claim-address retrieval behavior as a distinct rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-021](../libraries/saif-business-view-policy/business-rules.md#br-vp-021-address-retrieval-prefers-current-contacts-and-the-latest-effective-location-row) | Address retrieval prefers current contacts and latest effective location rows. | No documented application workflow reaches this address-selection behavior as a distinct rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-022](../libraries/saif-business-view-policy/business-rules.md#br-vp-022-affiliate-type-classification-follows-a-fixed-hierarchy) | Affiliate-type classification follows a fixed hierarchy. | No documented application workflow reaches affiliate-type resolution behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-023](../libraries/saif-business-view-policy/business-rules.md#br-vp-023-parent-policy-resolution-depends-on-the-resolved-affiliate-type) | Parent-policy resolution depends on affiliate type. | No documented application workflow reaches parent-policy resolution behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-024](../libraries/saif-business-view-policy/business-rules.md#br-vp-024-affiliate-total-rows-are-optional-and-vary-by-affiliation-family) | Affiliate totals are optional and vary by affiliation family. | No documented application workflow reaches affiliate-list totals behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-025](../libraries/saif-business-view-policy/business-rules.md#br-vp-025-wrap-up-legal-name-lookup-climbs-from-member-to-relationship-policy-to-rate-account) | Wrap-up legal-name lookup climbs through relationship and rate-account parents. | No documented application workflow reaches wrap-up legal-name lookup behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-026](../libraries/saif-business-view-policy/business-rules.md#br-vp-026-policy-header-retrieval-normalizes-null-financial-amounts-to-zero) | Policy header retrieval normalizes null financial amounts to zero. | No documented application workflow reaches this financial-field normalization as a distinct rule. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-027](../libraries/saif-business-view-policy/business-rules.md#br-vp-027-account-name-lookup-ranks-active-and-parent-policies-first) | Account-name lookup ranks active and parent policies first. | No documented application workflow reaches account-name lookup behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-028](../libraries/saif-business-view-policy/business-rules.md#br-vp-028-policy-waiver-count-equals-the-number-of-waiver-detail-rows-for-the-policy) | Policy waiver count equals matching waiver-detail row count. | No documented application workflow reaches waiver-count behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-029](../libraries/saif-business-view-policy/business-rules.md#br-vp-029-pending-cancel-policies-only-derive-the-demanded-status) | Pending-cancel policies derive only the Demanded status. | No documented application workflow reaches cancellation-status derivation behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-030](../libraries/saif-business-view-policy/business-rules.md#br-vp-030-cancelled-policies-use-a-fixed-precedence-order-for-derived-collection-statuses) | Cancelled policies use a fixed derived-status precedence order. | No documented application workflow reaches cancellation-status derivation behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-031](../libraries/saif-business-view-policy/business-rules.md#br-vp-031-defaulted-and-demanded-statuses-come-from-policy-demand-response-codes) | Defaulted and Demanded statuses come from policy-demand response codes. | No documented application workflow reaches cancellation-status derivation behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-032](../libraries/saif-business-view-policy/business-rules.md#br-vp-032-application-policies-return-saifquote-only-when-wcis-does-not-own-the-submission) | Application policies return `saifQuote` only when WCIS does not own the submission. | No documented application workflow reaches cancellation-status derivation behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-033](../libraries/saif-business-view-policy/business-rules.md#br-vp-033-information-page-status-is-returned-as-y-or-n) | Information-page status is returned as `Y` or `N`. | No documented application workflow reaches information-page status behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-034](../libraries/saif-business-view-policy/business-rules.md#br-vp-034-bound-policy-status-is-returned-as-y-or-n) | Bound-policy status is returned as `Y` or `N`. | No documented application workflow reaches bound-policy status behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-035](../libraries/saif-business-view-policy/business-rules.md#br-vp-035-external-client-email-lookup-requires-trimmed-case-insensitive-matches-on-mail-id-and-last-name) | External-client email lookup requires trimmed case-insensitive ID and last-name matches. | No documented application workflow reaches external-client lookup behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-036](../libraries/saif-business-view-policy/business-rules.md#br-vp-036-external-client-lookup-returns-null-when-no-contractor-row-is-found) | External-client lookup returns null when no contractor row is found. | No documented application workflow reaches external-client lookup behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-037](../libraries/saif-business-view-policy/business-rules.md#br-vp-037-group-policy-list-retrieval-selects-a-parent%2C-group%2C-or-group-and-chapter-branch-from-the-input-key) | Group policy-list retrieval chooses one branch from the input key. | No documented application workflow reaches group-policy-list behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-038](../libraries/saif-business-view-policy/business-rules.md#br-vp-038-group-policy-list-retrieval-keeps-only-active-or-still-effective-memberships-as-of-the-report-date) | Group policy-list retrieval keeps only active or still-effective memberships. | No documented application workflow reaches group-policy-list behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-039](../libraries/saif-business-view-policy/business-rules.md#br-vp-039-safety-consultant-book-retrieval-supports-exact-and-wildcard-loss-control-mail-ids) | Safety-consultant book retrieval supports exact and wildcard mail IDs. | No documented application workflow reaches safety-consultant book behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-040](../libraries/saif-business-view-policy/business-rules.md#br-vp-040-safety-consultant-book-excludes-flat-cancel-and-inactive-policies) | Safety-consultant book excludes flat-cancel and inactive policies. | No documented application workflow reaches safety-consultant book behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-041](../libraries/saif-business-view-policy/business-rules.md#br-vp-041-external-client-lookup-returns-the-latest-active-non-test-registrant-that-matches-the-supplied-id-and-last-name) | External-client lookup returns the latest active non-test registrant match. | No documented application workflow reaches external-client lookup behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-042](../libraries/saif-business-view-policy/business-rules.md#br-vp-042-current-certificate-flag-requires-a-certificate-detail-row-that-spans-the-policy-period) | Current-certificate flags require a spanning certificate-detail row. | No documented application workflow reaches certificate-detail behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-043](../libraries/saif-business-view-policy/business-rules.md#br-vp-043-viewable-rate-flag-requires-rate-account-ownership-by-the-requesting-agent-or-agency) | Viewable-rate flags require rate-account ownership. | No documented application workflow reaches rate-visibility behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-044](../libraries/saif-business-view-policy/business-rules.md#br-vp-044-closed-policies-are-limited-to-the-last-five-years) | Closed policies are limited to the last five years. | No documented application workflow reaches this policy-history behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-045](../libraries/saif-business-view-policy/business-rules.md#br-vp-045-pending-cancel-flag-is-derived-from-the-base-policy-status-code) | Pending-cancel flags are derived from the base policy status code. | No documented application workflow reaches this policy-status behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-046](../libraries/saif-business-view-policy/business-rules.md#br-vp-046-policy-in-group-membership-chooses-a-parent%2C-group%2C-or-group-and-chapter-query-path) | Policy-in-group membership chooses a parent, group, or chapter query path. | No documented application workflow reaches policy-in-group behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-047](../libraries/saif-business-view-policy/business-rules.md#br-vp-047-ordinary-group-key-detection-excludes-parent-group-rows) | Ordinary group-key detection excludes parent-group rows. | No documented application workflow reaches group-key-detection behavior. |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-048](../libraries/saif-business-view-policy/business-rules.md#br-vp-048-policy-in-group-returns-membership-as-a-count-and-applies-chapter-filtering-only-in-branch-three) | Policy-in-group returns membership as a count and applies chapter filtering only in one branch. | No documented application workflow reaches policy-in-group behavior. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-POPUP-001](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-popup-001-claim-activity-note-requires-category-and-type-selection-before-confirmation) | Claim Activity notes require category and type selection before confirmation. | No documented application screen or workflow in this repo reaches the Claim Activity popup. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-POPUP-002](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-popup-002-external-view-flag-is-auto-derived-from-the-selected-claim-activity-category) | Claim Activity auto-derives the External View flag from the selected category. | No documented application screen or workflow in this repo reaches the Claim Activity popup. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-POPUP-003](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-popup-003-notify-entry-requires-a-notify-id%2C-a-valid-notify-date%2C-and-the-date-must-not-precede-today) | Notify entries require a Notify ID and valid non-past Notify Date. | No documented application screen or workflow in this repo reaches the Notify popup. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-POPUP-004](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-popup-004-todo-diary-task-mail-id-must-resolve-to-a-valid-employee-when-required-or-supplied) | TODO diary tasks require a valid Mail ID when supplied or required. | No documented application screen or workflow in this repo reaches the TODO popup. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-POPUP-005](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-popup-005-a-%22requiredtask%22-diary-task-offers-only-acknowledgement-(no-decline-option)) | RequiredTask diary tasks allow acknowledgement only. | No documented application screen or workflow in this repo reaches the TODO popup. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-IMG-001](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-img-001-claim-context-lookup-blocks-the-worker's-name-for-confidential-claims-the-caller-cannot-view) | Image popup shows `Confidential` when the caller cannot view the claim. | No current screen or workflow artifact documents the image-move popup as a reachable application path. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-IMG-002](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-img-002-conflict-claim-visibility-requires-the-conflictclaim-(adsg_claim_conflict)-ad-resource) | Conflict-claim visibility requires the ConflictClaim AD resource. | No current screen or workflow artifact documents the image-move popup as a reachable application path. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-IMG-003](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-img-003-exposure-claim%2C-collateral-health%2C-and-hostile-worker-claim-visibility-each-require-a-distinct-ad-resource) | Exposure, collateral-health, and hostile-worker claim visibility each require distinct AD resources. | No current screen or workflow artifact documents the image-move popup as a reachable application path. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-IMG-004](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-img-004-claim-security-checks-are-enforced-only-for-the-saif-domain%3B-non-saif-callers-are-denied-outright) | Claim security checks run only for SAIF-domain callers. | No current screen or workflow artifact documents the image-move popup as a reachable application path. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-IMG-005](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-img-005-certain-system-mailboxes-are-always-allowed-to-receive-image-alerts) | Certain system mailboxes are always allowed to receive image alerts. | No current screen or workflow artifact documents the image-move popup as a reachable application path. |
| [SAIF.Presentation.Web.Controls.PopUps.Infragistics111](../libraries/saif-presentation-web-controls-popups-infragistics111/overview.md) | [BR-IMG-006](../libraries/saif-presentation-web-controls-popups-infragistics111/business-rules.md#br-img-006-image-access-for-the-current-user-vs.-a-delegated-mail-id-uses-different-authorization-sources) | Image access uses different authorization sources for the current user and delegated users. | No current screen or workflow artifact documents the image-move popup as a reachable application path. |
| [SAIF.Services.Appworx](../libraries/saif-services-appworx/overview.md) | [BR-APX-001](../libraries/saif-services-appworx/business-rules.md#br-apx-001-optional-arguments-omitted-when-empty) | Optional Appworx arguments are omitted when empty. | This is an Appworx submission helper behavior, not a distinct application rule traced from a user-facing workflow. |
| [SAIF.Services.Appworx](../libraries/saif-services-appworx/overview.md) | [BR-APX-002](../libraries/saif-services-appworx/business-rules.md#br-apx-002-submission-failures-are-wrapped-and-rethrown) | Appworx submission failures are wrapped and rethrown. | Current application workflows mention Appworx submission but do not trace this error-handling branch as a distinct rule. |
| [SAIF.Services.Appworx](../libraries/saif-services-appworx/overview.md) | [BR-APX-003](../libraries/saif-services-appworx/business-rules.md#br-apx-003-non-production-appworx-target-override) | Non-production Appworx target overrides may be applied. | Current application workflows mention Appworx submission but do not trace this environment branch as a distinct rule. |
| [SAIF.Services.Appworx](../libraries/saif-services-appworx/overview.md) | [BR-APX-004](../libraries/saif-services-appworx/business-rules.md#br-apx-004-unspecified-arguments-left-unset-in-shared-overload) | Unspecified Appworx arguments remain unset in the shared overload. | This is a method-overload behavior, not a distinct application rule traced from a user-facing workflow. |
| [SAIF.Services.Imaging.Import](../libraries/saif-services-imaging-import/overview.md) | [BR-IMG-001](../libraries/saif-services-imaging-import/business-rules.md#br-img-001-blank-out-unset-date-values-in-serialized-output) | Unset date values serialize as blank. | No documented application workflow reaches imaging-import serialization behavior. |
| [SAIF.Services.Imaging.Import](../libraries/saif-services-imaging-import/overview.md) | [BR-IMG-002](../libraries/saif-services-imaging-import/business-rules.md#br-img-002-blank-out-non-positive-numeric-defaults-in-serialized-output) | Non-positive numeric defaults serialize as blank. | No documented application workflow reaches imaging-import serialization behavior. |

## Related documentation
- [Application index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Operations and processes](operations-processes.md)
- [Security and authorization](security-authorization.md)
- [Data model](data-model.md)
- [Tech debt](tech-debt.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts.

## Sources
- `Legal\frmAcknowledge.aspx.vb`
- `Legal\frmAppeal.aspx`
- `Legal\frmAppeal.aspx.vb`
- `Legal\frmAssignment.aspx.vb`
- `Legal\frmCaseCost.aspx.vb`
- `Legal\frmCaseSearch.aspx`
- `Legal\frmCreateFile.aspx.vb`
- `Legal\frmMailDate.aspx.vb`
- `Legal\frmOtherParties.aspx.vb`
- `Legal\frmOutcomes.aspx.vb`
- `Legal\frmRequest.aspx.vb`
- `Legal\frmSchedule.aspx.vb`
- `Legal\frmSummary.aspx.vb`
- `Legal\frmTimeOff.aspx.vb`
- `Legal\frmUpdateCase.aspx.vb`
- `Legal\Scripts\Appeal.js`
- `Legal\Scripts\CaseSearch.js`
- `SAIF.Application\AppManagerBase.vb`
- `SAIF.Application.Claim\ClaimAppManager.vb`
- `SAIF.Application.Claim\ClaimSecurity.vb`
- `SAIF.Application.Claim\ClaimUserAccess.vb`
- `SAIF.Application.Claim.Legal\LegalManagerBase.vb`
- `SAIF.Application.Claim.Legal\LegalNet\clsAssignmentManager.vb`
- `SAIF.Application.Claim.Legal\LegalNet\clsCaseNotesManager.vb`
- `SAIF.Application.Claim.Legal\LegalNet\clsRequestManager.vb`
- `SAIF.Application.Claim.Legal\LegalNet\clsScheduleManager.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsAssignmentProcess.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCaseCost.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCaseSearchCriteria.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsConsolidations.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsCreateFileManager.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsMailDate.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsSchedule.vb`
- `SAIF.Business.Claim.Legal\LegalNet\clsLegalCase.vb`
- `SAIF.Business.Claim.Legal\Print\clsLetterRequest.vb`
- `SAIF.Business.Claim.Legal\TableMaint\clsAttorneyWorkerAssignment.vb`
- `SAIF.Business.View.Policy\clsAgency.vb`
- `SAIF.Business.View.Policy\clsPolicyAddress.vb`
- `SAIF.Business.View.Policy\clsPolicyData.vb`
- `SAIF.Business.View.Policy\clsPolicySecurity.vb`
- `SAIF.Presentation.Web.Controls.PopUps.Infragistics111\ImageMovePopup.vb`
